|
b712a720
|
2025-10-10T17:06:44
|
|
Translator: Check for recursion during parse
GLSL bans static recursion (i.e. it's an error even if recursion could
get dead-code-eliminated). Tracking the call graph at parse time lets
the translator be precise about this.
This change also prepares for a few follow up changes that make CallDAG
obsolete.
Bug: angleproject:349994211
Change-Id: I66f2cc3e544932f089f8185ccf15b3bd98779d13
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7031487
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
8469b249
|
2025-10-10T14:12:20
|
|
Translator: Reject infinite loop during parse
Bug: angleproject:349994211
Change-Id: I38964414b2992319e5f80f18a417210f86d806a6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7029684
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
caf63365
|
2025-10-15T13:10:37
|
|
Translator: Avoid unreachable in presence of shader error
When the gl_ClipDistance/gl_CullDistance index is tracked for future
validation, the parser expected the index type to be valid, but it may
not be if there's a compile error.
Bug: angleproject:349994211
Change-Id: I94f39bec34a8ae68ef7d6c3cce256026808c0bc9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7042014
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
ded8ecc0
|
2025-10-15T15:26:23
|
|
Translator: Handle GS and TES output gl_Position like VS
The spec declares these special shader variables identically as:
```
out gl_PerVertex {
highp vec4 gl_Position;
};
```
Between vertex, geometry and tessellation evaluation shaders. Since the
output is nameless, vertex shaders have always treated `gl_Position` as
if it's a variable on its own. In this change, TES and GS treat that
variable the same way.
Additionally, this change removes `gl_Position` as a standalone variable
from tessellation _control_ shaders, which must always use `gl_out`
instead.
Bug: angleproject:349994211
Change-Id: Ib33592fb62af31021a99f76f77c27da214425826
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7042770
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
97b93617
|
2025-10-15T15:17:15
|
|
Translator: Remove gl_out from TES built-ins
Tessellation evaluation shaders don't have such a built-in. Like
geometry shaders, they only have an `out gl_PerVertex` that is not an
array.
Bug: angleproject:349994211
Change-Id: I6b333a223b721ca5ceb2d6c5658d802cb66769ad
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7042769
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d9ff0591
|
2025-10-15T13:43:51
|
|
Translator fuzzer: dump the shader to stderr
Bug: chromium:448166385
Change-Id: I67ff0a5b78a488bef2a867abef4b7f1ba72137bf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7042568
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
255dc673
|
2025-10-09T00:17:59
|
|
Translator: Validate ESSL 100 limitations during parse
Validating the shape of the for loop as specifically required by WebGL
(per ESSL 100 spec, Appendix A) is more easily done during parse, where
the shape of the input GLSL is exactly known.
Bug: angleproject:349994211
Change-Id: I05a9b1b6915dbc1f6c74bb9159f6cc85fefc7b67
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7022355
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
84b0cf1a
|
2025-10-08T15:54:43
|
|
Translator: Validate gl_FragData xor gl_FragColor early
The translator validates that these two built-ins are not simultaneously
used. This validation is moved earlier to the post-parse checks.
Bug: angleproject:349994211
Change-Id: I59f1266406c3f82da560f3a18bb88571ab614d75
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7022017
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
8c15b966
|
2025-10-08T15:31:25
|
|
Translator: Validate MaxFunctionParameters limit during parse
Bug: angleproject:349994211
Change-Id: Ic9e4a6d1279cdfdb8d24a029182f3c83a79ef05f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7022016
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
e5b0553a
|
2025-10-08T15:18:25
|
|
Translator: Validate TCS barrier() rules during parse
... instead of doing an AST walk after parse.
Bug: angleproject:349994211
Change-Id: I175fecb593ac701208c20f77bb8dd3987c63fa11
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7022014
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
bf63a4ef
|
2025-10-08T15:13:58
|
|
Translator: Track control flow during parse
This change adds a stack to track control flow structures.
Currently, this replaces the loop/switch nesting level validation and
may look unnecessary, but a number of other post-parse validation will
be moved to parse-time and build on this stack.
Bug: angleproject:349994211
Change-Id: I841ce780f22410055feedb3194c24d84871a89cd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7022013
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
8af6c566
|
2025-10-08T11:25:49
|
|
Translator: Add more action routines to glslang.y
These will be used during IR generation, but are split in this change
because commits with glslang_tab_autogen.cpp take forever to
`git cl format`.
Bug: angleproject:349994211
Change-Id: Ib0a84710fa63fc33193fd5f485a434981baab61e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7022211
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
eec95a6b
|
2025-10-02T17:02:14
|
|
Translator: Remove NV_shader_framebuffer_fetch
This extension is never exposed by ANGLE. AFAICT, it was removed in
https://chromium-review.googlesource.com/c/angle/angle/+/688099 and
never added again.
The current implementation is incorrect even if the extension is
exposed; we assume gl_LastFragColorARM is the name, while this extension
uses gl_LastFragColor. This change removes mentions of this extension
instead of trying to fix it.
Bug: angleproject:349994211
Change-Id: I2391a225db95d73579fd71cf261360973e5935f7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7004390
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
074eec2f
|
2025-10-02T15:31:19
|
|
Translator: remove angle_BaseVertex/Instance from built-ins
These aren't built-ins, they are just used for emulation. Instead of
listing them in the built-in variables, they are now created as uniforms
during emulation.
This change also gives gl_BaseVertex/Instance their own qualifiers so
they aren't considered uniforms. The emulation pass is also optimized
to do fewer passes.
Bug: angleproject:349994211
Change-Id: I44fd345fd4a2dc4a001eb294952a984ae710d606
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7004388
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
b0ee4239
|
2025-10-01T16:46:10
|
|
Translator: Validate clip/cull distance size during parse
... instead of in a post-parse pass. In this process, these array sizes
are determined during parse itself, and so can be applied to the IR
earlier.
Bug: angleproject:349994211
Change-Id: I542970f9262e346fd7443e48d780e8abfec95315
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7003832
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
fecb8ead
|
2025-09-04T12:27:48
|
|
WGSL: implement inc/dec with generated functions
Implements inc/dec with generated WGSL functions that take pointers
and perform a post/pre inc/decrement. This works with scalars, vectors,
and matrices, both float and int.
WGSL supports inc/dec only on integer types, and only as statements
(not as expressions). https://www.w3.org/TR/WGSL/#increment-decrement.
The regular ++ and -- are used in this specific case.
The WGSL outputter records usage of increment/decrement and produces
a call to the correct function. A new class is introduced to keep the
record of which types need generated inc/dec WGSL functions.
Bug: angleproject:42267100
Change-Id: I0e70760ba5bd00f978e216f958216ae3137a146e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6935269
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
6a997ce2
|
2025-10-03T00:03:25
|
|
Vulkan: SPIR-V Gen: Use unique id instead of pointer
Bug: angleproject:349994211
Change-Id: I66d6c3cf58f1e7d850fb19def7aa863774d918a9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7007612
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
6c4c0055
|
2025-10-01T15:13:14
|
|
WGSL: fix do-while when body has continue
If the body of the do while had a "continue" it would
skip over the evaluation of the loop condition and
potentially loop forever.
Change to use the special WGSL "continuing" statement,
which goes at the end of a loop body and always executes,
even if there is an earlier "continue".
Bug: angleproject:42267100
Change-Id: I4ac73e6abcb12e0ff395b83dc5666ac1870724e9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7003772
Reviewed-by: Liza Burakova <liza@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
e1c14f0b
|
2025-10-02T23:42:01
|
|
Translator: Fix gl_LastFragColorARM not being qualified correctly
The qualifier adjustment was accidentally done after declaring the
variable in some cases.
Bug: angleproject:349994211
Change-Id: Iffd7567a119e1cd499c068742edfcb68a6a2336f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7006113
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d9fa255a
|
2025-10-02T11:58:06
|
|
Translator: Add numerous missing gl_PerVertex validations
Bug: angleproject:349994211
Change-Id: Ie4a602dd026a2dab95c9d77e8841e76967fa7f3d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7002885
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
1f3b482f
|
2025-10-02T12:05:44
|
|
Translator: Fix UNREACHABLE() on gl_DepthRange compile error
Bug: angleproject:349994211
Change-Id: I1918c8390de3fa4a5c7542b044e91e8d5e944b3a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7002886
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
4cff5289
|
2025-08-12T19:31:36
|
|
WGSL: append TSymbolUniqueId to overloaded functions
dEQP-GLES2.functional.shaders.functions.overloading.*
passes after this.
So that overloaded functions have unique names in GLSL,
append their TSymbol's unique id to the name of the
emitted WGSL function.
Bug: angleproject:42267100
Change-Id: I25026e71f9e27cb323014cd4102f914226c27d02
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6843927
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
ae02c329
|
2025-09-30T00:04:58
|
|
Translator: Give gl_DepthRange its own qualifier
gl_DepthRange and gl_NumSamples are considered "uniform" by the GLSL
spec, but gl_NumSamples gets its own qualifier in the translator. This
left gl_DepthRange as the only built-in that had to be detected by its
name instead of qualifier. This change adds a qualifier for
gl_DepthRange to remove this special-ness.
Bug: angleproject:349994211
Change-Id: I2b7b0acf3dcaef22bb4a98e4d35fd2cdfd5c825a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6998990
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
789693f0
|
2025-09-30T14:30:59
|
|
Translator: Fail compilation if built-in redeclared after qualified
If a built-in is qualified then redeclared like so:
invariant gl_FragDepth;
out float gl_FragDepth;
the translator would have to remove the previous qualification statement
and apply its effect to the redeclared variable directly. While this is
possible, it has always been broken (i.e. there are no users), and is
not really useful to support, since the application could have done the
following instead:
invariant out float gl_FragDepth;
The spec does not explicitly call this out as invalid, but this change
generates a compile error for the above scenario anyway, as supporting
it can get unnecessarily intrusive.
Bug: angleproject:349994211
Change-Id: I9ddb181c8808f50aeed5b327a95b3df829206822
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6999640
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7b14dd73
|
2025-08-19T15:57:34
|
|
WGSL: RewriteMixedTypeMathExprs
RewriteMixedTypeMathExprs: Some mixed-type arithmetic is legal in GLSL
but not WGSL. Generate code to perform the arithmetic as specified in
GLSL.
Example:
uvec2 x;
uint y;
x &= y;
Is transformed into:
x &= uvec(y);
Also,
mat2 x;
int y;
x += y;
Is transformed into:
x += mat2(float(y), float(y), float(y), float(y))
Bug: angleproject:42267100
Change-Id: I4a0ec1d9806b3331b4b1feff6fbe7c0f212f8120
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6862843
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
a38f60ea
|
2025-09-30T13:40:44
|
|
Translator: Fail compilation if main() is only prototype
Bug: chromium:448166385
Change-Id: Ia6b69839e35f3e0dcdf3e6e918397d3e2fd83fa2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7000630
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
85631b1d
|
2025-09-30T14:25:30
|
|
Translator fuzzer: Dump the shader before compiling it
So that fuzzer reports tell you what the shader is without us needing to
debug-print it.
Bug: chromium:448166385
Change-Id: If2454093abd73771cbac787c7516259db6be82d2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6999637
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
e5b33850
|
2025-09-26T14:59:20
|
|
Translator: Fail earlier if main() is not present.
The IR assumes that main() is available on successful parse.
Additionally, in preparation for IR removing a check that the AST root
is set up, a compile failure to that effect is turned into an assertion.
The AST generated before IR is logically only used for validation
purposes, so the compiler cannot rely on it to generate an error.
Bug: angleproject:349994211
Change-Id: I5d4501b52fed8214213a4ae1dada923decee9a8b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6991529
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
f3405af0
|
2025-09-25T13:45:08
|
|
Translator: Fix gl_in redeclaration
This was seemingly untested, and had multiple issues:
* GLSL generation would output `gl_in gl_PerVertex { ... } gl_in;`
* SPIR-V generation would redeclare `gl_in` despite one already
existing.
* If sized after declaration, the redeclared `gl_in` was referencing a
different variable than the resized one.
Bug: angleproject:42264111
Bug: angleproject:349994211
Bug: angleproject:447556589
Change-Id: Id63912b68625bafcc64197807b1c8a86e6f952b5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6985323
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
f95cbef4
|
2025-09-07T17:50:37
|
|
Reland "Add a "noncoherent" layout qualifier to PLS"
This is a reland of commit ef9c5ce43110f4f8ba56124bdee927944ce3ddd1 with
an invalid assert removed.
Original change's description:
> Add a "noncoherent" layout qualifier to PLS
>
> Raster ordering can be expensive. If an app knows the geometry in a draw
> does not overlap, it can mark the PLS planes as noncoherent and opt for
> using barriers instead.
>
> Bug: angleproject:40096838
> Change-Id: I2d686c2e64f51940face186637a9fcadcc251bef
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6923300
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Kenneth Russell <kbr@chromium.org>
> Commit-Queue: Chris Dalton <chris@rive.app>
Bug: angleproject:40096838
Change-Id: I55077a973063427dfb0d510c87e75ec86ce8bb43
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6991929
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
18f28e59
|
2025-09-25T13:41:45
|
|
Translator: Mark redeclared gl_Position/PointSize as built-in
When redeclared according to EXT_separate_shader_objects, these
variables were given a UserDefined symbol type. While this doesn't
affect SPIR-V (with Vulkan being the only backend that supports
EXT_separate_shader_objects), it does affect the rest of the AST,
including GLSL generation which would output _ugl_Position if support
for the extension is enabled.
Bug: angleproject:42265086
Bug: angleproject:349994211
Change-Id: I04d088017dbe6e32bfee675f0124c4cc3ffdefc2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6985322
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4eb8604f
|
2025-09-24T00:13:51
|
|
Translator: Use EvqNumSamples for gl_NumSamples
This qualifier was seemingly intended for this built-in, but EvqUniform
was used for it instead; presumably following gl_DepthRange.
Bug: angleproject:349994211
Change-Id: I1ec7f76195d790ac2a53c4f2b0f9a136976480d5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6977986
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
bfdf223a
|
2025-09-23T11:42:39
|
|
Translator: Don't differentiate static read vs write
In the end, the only thing that matters is whether a symbol is
statically used, so no need to track whether the static use was in a
read or a write context.
Bug: angleproject:349994211
Change-Id: I4964fc9f76a5f7798f1b5e42ce2ae997dca78063
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6976297
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a44693f6
|
2025-09-17T14:50:37
|
|
Vulkan: Fix SPIR-V gen for invariant structs
Bug: angleproject:349994211
Change-Id: I7db05d9a6232a577a65f7a337cfd1636bce0c53b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6961859
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
44db20f2
|
2025-09-17T15:57:09
|
|
Revert "Add a "noncoherent" layout qualifier to PLS"
This reverts commit ef9c5ce43110f4f8ba56124bdee927944ce3ddd1.
Reason for revert: Causes issues on Apple silicon crbug.com/445727125
Original change's description:
> Add a "noncoherent" layout qualifier to PLS
>
> Raster ordering can be expensive. If an app knows the geometry in a draw
> does not overlap, it can mark the PLS planes as noncoherent and opt for
> using barriers instead.
>
> Bug: angleproject:40096838
> Change-Id: I2d686c2e64f51940face186637a9fcadcc251bef
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6923300
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Kenneth Russell <kbr@chromium.org>
> Commit-Queue: Chris Dalton <chris@rive.app>
Bug: angleproject:40096838
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Change-Id: Ibc24bed27cec406b6e4ffa9aaa8fe3a2110b58ba
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6962955
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
|
|
f128872e
|
2025-09-16T23:37:08
|
|
Translator: Compare variables by unique id instead of pointer
Bug: angleproject:349994211
Change-Id: I32ab2ffe9a04e196330949484e704913d0f4e41d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6955119
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
ef9c5ce4
|
2025-09-07T17:50:37
|
|
Add a "noncoherent" layout qualifier to PLS
Raster ordering can be expensive. If an app knows the geometry in a draw
does not overlap, it can mark the PLS planes as noncoherent and opt for
using barriers instead.
Bug: angleproject:40096838
Change-Id: I2d686c2e64f51940face186637a9fcadcc251bef
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6923300
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Chris Dalton <chris@rive.app>
|
|
16771259
|
2025-09-12T11:10:18
|
|
Update main() prototype in shader if main() has been replaced.
If the main() function definition has been wrapped/replaced in a shader
and a main() function prototype is also present, the prototype needs to
be replaced. Otherwise it will continue to reference the replaced
main() which can cause issues with shader translation steps.
Bug: angleproject:444653099
Change-Id: Ie6ce85cac89e026876a1b6e25cd294f1d8a536c4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6944807
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
b8281f5d
|
2025-09-09T17:15:26
|
|
Add condition check in emulate dithering shader code
Prior to this change, the emulate dithering shader code will write to
all elements of gl_FragData, regardless of whether the dither value is
zero or not: gl_FragData[i] = gl_FragData[i] + dither_value.
If dither_value is 0, then this doesn't change gl_FragData[i] and it
incurs unnecessary shader writes.
This change adds a boolean variable that is initialized to
false, and it is only set to true if dither value for that output
element is changed from zero to non-zero value. This way we are only
issuing shader write operations when necessary.
Bug: angleproject:425733272
Change-Id: Iacfd81ff9a1d7d0f71ecf8d119033b2500d2869e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6931777
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a0cc64cd
|
2025-09-10T15:18:17
|
|
HLSL: Mark shadow sampler textureLod calls as using gradients
TextureLod calls bottom out in the HLSL SampleCmp function which does
not take a LOD parameter so we end up dropping it. This causes them to
need gradients. Mark them as using gradient so that any loop they are
used in is flagged and not unrolled by FXC.
Reverted original fix from
https://chromium-review.googlesource.com/c/angle/angle/+/6421496
because the wrong number of parameters are passed to the generated
comparison sampling function when it is changed to LOD0.
Thanks to Mikkel Simonsen at Unity and Calder Young for the tests.
Fixed: angleproject:406190894
Change-Id: Ia9255e4336099045366c02f945a3c4de8075427a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6936488
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
a471c005
|
2025-08-19T17:24:38
|
|
WGSL: derivative_uniformity diagnostic should be a warning
WGSL requires derivatives to be calculated only if it can
statically prove control flow is uniform. GLSL allows
dynamically uniform control flow in this case. This CL uses
WGSL's diagnostic filter to make derivative_uniformity
diagnostics into warnings, to match GLSL semantics.
Bug: angleproject:392542001
Change-Id: I98dd55205ad6d3c9d13ca3f94c0e7858ba92d536
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6862844
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Matthew Denton <mpdenton@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
cfe2c8fe
|
2025-06-25T13:25:01
|
|
WGSL: RewriteMultielementSwizzle
WGSL doesn't support assignments to multi-element swizzles.
This is used in a lot of shader tests, so temporarily work around
this with an AST traverser that splits these assignments into
multiple assignments that only assign to single element
swizzles.
One special case is multiplication-by-a-matrix assignment:
vec.xy *= mat;
is converted to
vec.x = (vec.xy * mat).x;
vec.y = (vec.xy * mat).y;
Bug: angleproject:392542001
Change-Id: I3f393039aae13eb3f2c5dc5e553f68eb03b6316d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6847280
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Liza Burakova <liza@chromium.org>
|
|
c1cdc2b5
|
2025-08-22T15:23:58
|
|
Transform SPIRV to use 16-bit float for lower precision uniforms
This change adds a ShCompileOption flag transformFloatUniformTo16Bits.
The flag is turned on in vulkan backends where VK_KHR_16bit_storage
extension is supported, and uniformAndStorageBuffer16BitAccess feature
is supported. When the compiler flag is turned on, in the generated
SPIRV, float data types in mediump and lowp uniforms are transformed
from 32-bit to 16-bit. The 16-bit float uniform data is converted to
32-bit with OpFConvert instruction upon loading in SPIRV, this is to
minimize the changes in OutputSPIRV.cpp. The converted variable is
decorated with RelaxedPrecision, so that SPIRV compiler should be able
to treat the converted variable as 16 bits, and the hardware can
still benefit from reduced precision floats.
The frontend is also notified such SPIRV shader changes by setting
the isFloat16 bit in CollectVariables() step, and the frontend will
transform float uniform data from 32-bit to 16-bit before storing the
data into memory. That way, the uniform data that SPIRV shader reads
matches with the uniform data type transformed in the SPIRV shader.
This change also updates some test code to allow relative 2^-10
precision wiggle room for mediump uniform floats. This is valid
according to spec:
https://developer.arm.com/documentation/102502/0101/Shader-precision
Bug: angleproject:405795981
Bug: angleproject:440941211
Change-Id: I05db7f5ef744df513fbad87cfed8aa173890ec26
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6851560
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
eefcdafd
|
2025-08-29T00:13:27
|
|
Fix some old clang-tidy warnings about move constructors
-- Remove move of copy-only ImmutableString
-- Fix rule-of-five issues with StringPart.
Bug: b/364788123
Change-Id: Ief9c2a83df15d2e8856e8f729c1908df65004bfc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6896659
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Tom Sepez <tsepez@chromium.org>
|
|
6f0337a0
|
2025-08-28T23:13:22
|
|
Avoid some needless c_str() calls.
Remove conversions from string -> char* -> string, as detected some
time ago by a clang compiler plugin. Typically, this occurs when
passing a c_str() result to a function that expects a string argument.
Bug: b/412730353
Change-Id: I1d9c83e9ed5c4900eec266e71f534661f0f3d4d4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6896657
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
1ae273ee
|
2025-08-27T10:47:59
|
|
Translator: Output struct members in OutputTree
Bug: chromium:438038775
Change-Id: I2a1bed5207b1b2c26f20ee9ebd80fb00ec803bc2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6891072
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
af0386cb
|
2025-08-27T10:44:53
|
|
Reorder structs entirely made of samplers to the end of struct
An earlier change [1] moved samplers to the end of structs so that
extracting them does not disturb the indices to the non-sampler fields.
This change does the same for structs that only contain samplers,
because they too get removed from the parent struct, disturbing indices.
[1]:https://chromium-review.googlesource.com/c/angle/angle/+/5748789
Bug: chromium:438038775
Change-Id: I7ac2ea13723bf06b4b172b6e70f0dbe85bc45ce3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6891071
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
9dc36791
|
2025-08-28T07:24:21
|
|
WGSL: Fix unused variable in translator
Test: Build with is_debug = false
Bug: angleproject:441701631
Change-Id: Ifa44bb5388788602e76c2ae2005bdd41d2c22dd4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6896036
Auto-Submit: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a02670d6
|
2025-08-26T20:41:16
|
|
Move unsafe buffers inside header guard macros
While this is exactly opposite of what Chromium has chosen to do,
there is an issue with clang-format trying to indent preprocessor
directives four spaces relative to include guard. This is because
Angle's .clang-format file specifies IndentPPDirectives: AfterHash
but Chromium's does not. The current placement is sufficient to
throw off clang-format's guard detection since the guard macro no
longer covers the entire file.
Bug: b/436880895
Change-Id: Ic6b99c8cef6213939cdf9b42af8730e1eb423065
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6885892
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b9cec916
|
2025-08-12T19:44:18
|
|
WGSL: default uniforms gathered in interface block
The default uniform struct was being manually output by
OutputUniformBlocksAndSamplers(), which did not add the appropriate
@align(16) annotations to lay the struct out according to WGSL's
uniform address space layout requirements.
This CL uses Vulkan's method of gathering the default uniforms
into an interface block. The interface block will be output
normally by the traverser, including @align() annotations.
The variable declaring an instance of the interface block is
still output by OutputUniformBlocksAndSamplers() because it needs
special @group() and @binding() annotations.
Bug: angleproject:376553328
Change-Id: Ib3be7d51ffedefe5ec579a1c9aaf0a535146c694
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6795028
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Liza Burakova <liza@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
25390156
|
2025-08-21T00:13:19
|
|
Suppress unsafe buffers on a file-by-file basis in src/ [1 of N]
In this CL, we suppress many files but stop short of actually
enabling the warning by not removing the line from the
unsafe_buffers_paths.txt file. That will happen in a follow-on
CL, along with resolving any stragglers missed here.
This is mostly a manual change so as to familiarize myself with
the kinds of issues faced by the Angle codebase when applying buffer
safety warnings.
-- Re-generate affected hashes.
-- Clang-format applied to all changed files.
-- Add a few missing .reserve() calls to vectors as noticed.
-- Fix some mismatches between file names and header comments.
-- Be more consistent with header comment format (blank lines and
trailing //-only lines when a filename comment adjoins license
boilerplate).
Bug: b/436880895
Change-Id: I3bde5cc2059acbe8345057289214f1a26f1c34aa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6869022
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f63751db
|
2025-08-22T10:34:45
|
|
Fix the UniformSortComparator not following strict weak order
If one uniform is lowp and the other uniform is mediump, then the
compare(a, b) and compare (b, a) both return true. This violates the
strict weak order rule where:
If comp(a, b) == true then comp(b, a) == false
This change fixes the bug.
Bug: angleproject:405795981
Change-Id: I47e2668fc0fa87ecea9d3f9bce511c9823a39929
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6876519
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
20dca0b9
|
2025-08-14T13:54:37
|
|
Add a new TInterfaceBlock class member to hint ANGLE default Uniform
In later change, we will transform floats in ANGLE default uniform
struct from 32-bit to 16-bit in SPIRV. The new class member
mIsDefaultUniformBlock will help us identify this special struct.
This change is no op.
Bug: angleproject:405795981
Change-Id: I939caf7491ab5d7de130ba6a2fd8b1202958c375
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6852398
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
a06cb368
|
2025-08-12T11:45:43
|
|
Fix GCC -Wdangling-pointer warning in NodeStackGuard
The previous implementation stored the address of a local member
(oldNodeStack) into ConsList::tail, which triggers the warning even
though the lifetime is safe within the guard's scope.
This change allocates a copy of the previous nodeStack on the heap
using std::make_unique, and stores that pointer in tail. This ensures
the referenced ConsList object has a lifetime tied to the guard object
itself and is not considered a dangling pointer by GCC's static
analysis.
BUG: angleproject:438226513
Change-Id: Ifea04515db7b1988dff6ec41c60799158b753128
Signed-off-by: Sungyong Choi <sywow.choi@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845476
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
806c80ec
|
2025-08-14T13:41:58
|
|
Add a new ShaderVariable struct property
Add a new ShaderVariable struct property isTransformedFP16FloatUniform.
This property will be set by compiler when the corresponding shader
variable data type in shader code is transformed from 32 bit to
16 bit. The property value be later passed to LinkedUniform so that
the frontend knows if it should transform the data from 32 bit to 16
bit before writing to memory, and if it should transform the data
from 16 bit to 32 bit after reading from memory.
This change is no op.
Bug: angleproject:405795981
Change-Id: Iaae15baa8ab9f7c3295071fa1e1ab04752bd69bb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6852396
Auto-Submit: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
25f5e2cf
|
2025-08-13T17:03:19
|
|
Vulkan: Add support for built-in gl_PrimitiveShadingRateEXT
Add support for built-in gl_PrimitiveShadingRateEXT and relative const
value.
Bug: angleproject:397255625
Change-Id: I25d51f5805697e137b232175ee790808c45850b7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845515
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
1d8279a2
|
2025-08-13T13:35:02
|
|
Do not sort ANGLE internal uniforms or built-in uniforms
On Mac, for webGL app on chrome, if the uniforms added by ANGLE
are not placed at the top of the ANGLE_UserUniforms struct, the user
defined uniforms in the same ANGLE_UserUniforms struct seem to be
messed up and not read correctly by shader code. This change fixes
it by moving the sortUniforms() function call to the place before we
add ANGLE internal uniforms. That way ANGLE internal uniforms will
be inserted later and stay on top of ANGLE_UserUniforms struct.
Bug: chromium:437678149
Change-Id: I34a0d3dcb98c5fe30ad248381ecb5f7f78252275
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6847281
Auto-Submit: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
63d8f74c
|
2025-08-12T19:39:03
|
|
WGSL: move DeclareDefaultUniforms() out of SPIR-V
WGSL needs the same thing (default uniforms gathered into
an interface block).
Changes 3 things in the file move:
1. Now capable of adding a named interface block (Vulkan's
is nameless) to hold the default uniforms.
2. Removes inactive uniforms
3. Deals with the case where there are no active default
uniforms, by not declaring an interface block at all.
Bug: angleproject:376553328
Change-Id: Ia25318b4db93068010c3c44414cd00803b783799
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6843929
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
edb05627
|
2025-08-12T12:17:36
|
|
Fix sort uniform bug
Current sort doesn't take care of the case when both uniforms
are struct specfiers. Given that struct types are easily broken by
sort, make the sort not reordering uniforms if both are structs.
Bug: b/437825940
Change-Id: Idda1810ac4234f7e1547735e4e09658ab0a57eed
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6842936
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7e28089b
|
2025-07-31T18:44:01
|
|
WGSL: support bvecs in uniforms
WGSL does not allow booleans in the uniform address space.
The last CL uses u32s to represent bools in the uniform address
space, and this CL uses vecN<u32> to represent bvecN.
Bug: angleproject:376553328
Change-Id: Ibf9f1fbf230ca03dd3d4661ba599e5fb1cb26ac4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6808955
Reviewed-by: Liza Burakova <liza@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
b2e2766c
|
2025-08-12T11:08:46
|
|
Translator: Reject bool < bool
This is not allowed per the GLSL ES spec.
Bug: chromium:437983671
Change-Id: I9bd46718a35917dcdf6382cd51253ca2b68d5636
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6842555
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
ca3d732d
|
2025-07-24T16:22:31
|
|
WGSL: support bool in uniforms
WGSL does not allow booleans in the uniform address space.
This CL changes the translator to substitute u32 for bool
in the uniform address space, and convert it to bool on use.
Arrays of bools are obviously arrays of u32s, and those
will need special conversion functions to convert the entire
array<u32> to array<bool> if necessary.
This also includes the optimization of an array<bool> in a
uniform--when indexing into it, only the indexed element
will be converted to a native bool, instead of converting
the entire array and then indexing.
Note that substituting u32 for bool matches std140, so this
change requires no changes to layout of uniforms.
Also note that WGSL really likes explicit casts, so there's
not really a way to avoid inserting explicit casts everywhere
when using u32.
Bug: angleproject:376553328
Change-Id: I8f72e55c6b401c28ff622622df7a450b7032721f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6785609
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Liza Burakova <liza@chromium.org>
|
|
fc0e0397
|
2025-07-31T13:15:45
|
|
Translator: Fix location validation for inout
Without this validation, a shader using an inout variable can
write into a memory beyond the limit set by MaxDrawBuffers when
shader framebuffer fetch is enabled.
* Extended the location check in visitSymbol() to include InOut
qualifiers (EvqFragmentInOut) as well (in ValidateOutputsTraverser).
* Moved RewritePixelLocalStorage() after ValidateOutputs() to avoid
issues related to locations not being specified in the InOut nodes
from the PLS implementation.
* Added a unit test to test that this case results in a compilation
error: GLSLTest_ES3.CompileFSWithInoutLocBeyondMaxDrawBuffers
Bug: chromium:435139154
Change-Id: I44c729377a2e1d3126c2d279172217b2ab92b57b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6806230
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a1d5d102
|
2025-07-22T02:15:43
|
|
WGSL: Allow matrices as in/out vars in shaders
WGSL only supports scalars and vectors in in/out vars in shaders,
matrices will need to be broken into column vectors and then
put back together at the beginning (or end) of the shader.
Arrays also need to be split, which will be done in another CL.
Bug: angleproject:42267100
Change-Id: If1ba28c1b687ae0a3a5a554479f0ff0b5d9df39c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6777201
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Liza Burakova <liza@chromium.org>
|
|
6a3ff5a1
|
2025-07-17T12:41:13
|
|
WGSL: extra debug logging for failure cases
Bug: angleproject:42267100
Change-Id: I8938526b60af71d15d4327bc10fa172117afef60
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6777200
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
343e3bdc
|
2025-07-17T12:38:31
|
|
ScalarizeVecAndMatConstructors: also handle scalar constructors
In WGSL you cannot "construct" a scalar from a non-scalar (vec or mat).
This modifies ScalarizeVecAndMatConstructors to handle scalar
constructors as well, indexing and swizzling the argument to select the
first element of the nonscalar.
This makes dEQP-GLES2.functional.shaders.conversions.vector_to_scalar.*
pass (except those that use bool uniforms which are still unsupported).
Bug: angleproject:42267100, angleproject:395659799
Change-Id: Ibaa3dc14f36fecb384bfb6e7f226c6d5f377dd5f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6777199
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
b7582680
|
2025-02-24T18:04:32
|
|
Reland: GL: Allow untranslated shaders to pass through on GLES
Add an EGL extension EGL_ANGLE_create_context_passthrough_shaders which
uses the NULL translator and passes the original shader to the driver.
The parser is still used for shader reflection.
Always enable the null compiler backend. It has almost no binary size
cost and is now potentially used when the null ANGLE backend is not
enabled.
Bug: angleproject:398857482
Change-Id: Id528189ccbbacb1c444eacb151baadfda9fcc04b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6488609
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
cbff5658
|
2025-07-16T14:10:47
|
|
ScalarizeVecAndMatConstructorArgs: cast for mat constructors
In WGSL, matrix constructors also can't handle arguments of differing
basic type than the constructor's basic type, so cast when necessary.
Makes dEQP-GLES2.functional.shaders.conversions.scalar_to_matrix.*
pass for WGSL.
dEQP-GLES2.functional.shaders.conversions.matrix_to_matrix.* does not
yet pass because WGSL can't handle matrix shader inputs/outputs.
Bug: angleproject:42267100, angleproject:395659799
Change-Id: Ia4761190c78ccfe7d748275642361ada93314529
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6777198
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Liza Burakova <liza@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
2c1a55b3
|
2025-07-16T13:44:49
|
|
WGSL: implement == for vectors by wrapping in all()
WGSL's vec comparisons are component-wise, so wrapping the result in a
call to all() returns true if all components compare equal, matching
the behavior of GLSL's vec comparisons (== and !=).
Bug: angleproject:42267100
Change-Id: Icfbfacf72e53096e2567fa89bcd4bf573e457ec1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6777197
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Liza Burakova <liza@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
e98dec82
|
2025-07-20T22:16:00
|
|
Translator: Remove Sampler2DRectShadow
This is a desktop GLSL type.
Bug: angleproject:370937467
Change-Id: Ife8b50e57f6e054ccd35df10c2157f8e4a218d37
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6774081
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
251ffe62
|
2025-07-15T17:37:30
|
|
Vulkan: Add support for built-in gl_ShadingRateEXT
Add support for built-in gl_ShadingRateEXT of
GL_EXT_fragment_shading_rate
Bug: angleproject:420310117
Change-Id: Ie11b139a0371b5995f1533a85e02c590cd36109c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6733750
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7cbb77a8
|
2025-07-14T11:32:04
|
|
Fix the uniform reorder bug
When sorting uniforms, we should first check if both uniforms are
structs, and make sure to place the uniforms with specifier in front
of the uniforms without specifier.
Bug: chromium:431318231
Change-Id: I8be9501f34073983b7f3d040780b749a7366e3d2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6733547
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
93b659f9
|
2025-07-04T12:35:29
|
|
Remove PoolAllocator push/pop feature
PoolAllocator would manage a stack of memory pools upon client
calling push() and pop(). This made the code unnecessarily complicated.
The feature was only used with nesting of one, to mark the memory
unused after a shader compile.
Fix by removing the push/pop feature. Instantiate PoolAllocator in
places the previous push() was and uninstantiating instead of previous
pop().
This removes the feature where the PoolAllocator would hold on to
the allocated memory in order to reuse it. This is seen as a
progression: the allocator is held by the compiler, the compiler is
held by the shader and each shader typically see only one compile.
Thus the free pages were just leaking unused until the shader was
destroyed. Instead, destructing the PoolAllocator instead of pop()
will donate the memory back to platform/OS, where it is likely
more useful.
To preserve existing Vulkan behavior, add PoolAllocator::reset()
which would mark the memory unused but leave them reserved for the
PoolAllocator.
Removes UB where PageHeader::nextPage would be accessed after
~PageHeader.
Bug: angleproject:429513168
Change-Id: I21e58b46e0887380db3a2cab5ce22f0042cfae9e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6701153
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
1443a451
|
2025-07-04T16:18:30
|
|
Regenerate the parsers with current cl format
The format tool has changed since last parser generation.
This causes overly many changes when downstream regenerates
the parsers.
The diff formatting fails for flex and bison generated content.
Format them in full always.
Bug: angleproject:429588208
Change-Id: I7a4b8e966e9502920fc25f5c1c5bf80246f5cf0b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6705451
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
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>
|
|
5d51bd19
|
2025-07-01T15:40:10
|
|
Translator: Handle arrays of samplers in FlagSamplersWithTexelFetch
This was found while running tests for Dawn's "sized binding arrays"
(including arrays of textures) with ANGLE + Swiftshader.
Adds a test that ASSERTs without the change.
Bug: chromium:411573957
Change-Id: Ib7fad0f5c0b4f3aa70e6af5bf5977b82956e1986
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6695013
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
|
|
56e9bfff
|
2025-06-19T00:00:00
|
|
GL: Remove obsolete macOS workarounds
Bug: angleproject:427600175
Change-Id: I8bfc062b71f1a34de09cbf76b504293ccd081fe0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6676022
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
beae1b4a
|
2025-06-19T00:00:00
|
|
Metal: Remove obsolete workarounds
Removed Intel-specific Metal workarounds
that are not used on macOS 12 and later.
Removed a redundant version check.
Bug: angleproject:427600175
Change-Id: I34c7e53108f7e030512c9436ab2b9ae38ad17946
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6672312
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
f48fcb46
|
2025-06-19T07:11:48
|
|
Revert "Metal: Wraparound int arithmetic for add, sub"
This reverts commit 2f6f0514563d81e439e04ba09eee9e8a1d6ca8d1.
Reason for revert: Leads to MSL compiler errors:
> error: non-const reference cannot bind to vector element
Bug: angleproject:382215759
Original change's description:
> Metal: Wraparound int arithmetic for add, sub
>
> Implement wraparound int arithmetic for
> int, ivec +, -, +=, -=, ++, --.
>
> All of the added tests pass also without the changes.
>
> Bug: angleproject:382215759
> Change-Id: I7605582ab2931e63010c34fba474797f7edd19f9
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6578729
> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Bug: angleproject:382215759
Bug: chromium:425746892
Change-Id: I831d96c6ee7b8bcdeaa08fbf32d430def87a3c30
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6656001
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a2b84cc0
|
2025-06-17T09:47:58
|
|
Fix bug in translator fuzzer.
We were incorrectly checking a type against a spec.
bug: angleproject:425580663
Change-Id: I7a57852b143ea26a41414015414d43720e2e53b1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6650788
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
94ee620d
|
2025-05-22T10:07:05
|
|
Metal: Allow optimization of simple loops
Reimplement the feature to avoid undefined behavior of infinite loops.
Add EnsureLoopForwardProgress rewrite pass that inserts a volatile
variable access to all loops that it cannot analyze as being finite.
Detect loops of form `for (; i <op> x; ++i)` as being finite.
The <op> can be any of <,<=,>,>=,==, != operator.
The i can be int or uint.
The ++i can be -- or ++, -=1, +=1.
This assumes that backends using the feature emit signed int arithmetic
with defined wraparound semantics.
Uses volatile write instead of asm("") due to asm not forcing the
behavior in some compiler versions. The volatile variable access is
defined in C++ as forward progress, and by inheritance this works in
MSL.
Later commits may remove injectAsmStatementIntoLoopBodies if
ensureLoopForwardProgress is appropriate for all use-cases.
Bug: angleproject:418918522
Change-Id: Ic9c29f57044b792195386483208632354d24c854
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6575051
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
005336e4
|
2025-06-11T17:17:16
|
|
WGPU: Basic texture cubes
Allows uploading to texture cube faces and sampling from them
in shaders using samplerCube.
Bug: angleproject:420782526
Change-Id: I45d4370fcc418f39afb225114d13632a78c7c200
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6593999
Reviewed-by: Liza Burakova <liza@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
1e613fec
|
2025-05-27T16:59:26
|
|
Compiler: sort uniforms by precision
This change reoreders the AST sequences so that uniform declarations
with lower precisions are places in front of uniform declarations with
higher precisions. This is to prepare for the upcoming change that
converts uniforms declared with mediump or lowp to 16-bit and pack them
to 32-bit integeter using packHalf2x16().
Bug: b/405795981
Change-Id: I5e1e293399dc8b51b9a6e83115f95beb0c4a7b1b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6594255
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
af6313f5
|
2025-06-02T10:31:27
|
|
Check redundant statements for comma op in MSL translator.
Bug: angleproject:421891565
Change-Id: I0475476f360f103a3da4df263dae9c604a8bfef5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6610091
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
bc2c85a6
|
2025-05-27T11:40:33
|
|
Translator: Set correct qualifiers on user-declared gl_PerVertex
Bug: angleproject:409439499
Change-Id: Ia4bc1335d977f2b138af877e5d698914b182ff52
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6592612
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
2f6f0514
|
2025-05-22T15:59:19
|
|
Metal: Wraparound int arithmetic for add, sub
Implement wraparound int arithmetic for
int, ivec +, -, +=, -=, ++, --.
All of the added tests pass also without the changes.
Bug: angleproject:382215759
Change-Id: I7605582ab2931e63010c34fba474797f7edd19f9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6578729
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
157a99aa
|
2025-05-20T23:59:29
|
|
Update logic for redeclaring gl_FragDepth.
Update ParseContext logic to handle redeclaration of gl_FragDepth.
Bug: angleproject:419066563
Change-Id: I774d036922ec75ca151f1c871afc243ca09a3061
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6573532
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
96c9f065
|
2025-05-15T19:22:29
|
|
WGPU: Flip y for the default framebuffer
Bug: angleproject:389145696
Change-Id: I0d527ad3dc24dbca7e9d914b03edacdc257a568f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6477137
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
671f55d8
|
2025-04-03T22:54:44
|
|
Vulkan: Fix texelFetch(externalSampler) behavior
GLES expects YUV decoding to happen with texelFetch when an external
sampler is used, but texelFetch's translation (OpImageFetch) does not do
such a thing. A transformation is added to replace that with a texture
call at the right coordinate.
Bug: angleproject:405149439
Change-Id: I3a8d07a6399705ec07718b38085ee4bc1ad2af6c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6431570
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
cac1e824
|
2025-04-29T18:27:36
|
|
WGSL: Output driver uniform and UBO structs
This is the WGSL half of the change to implement driver uniforms.
Driver uniforms are implemented as a UBO and reuse the default
set of driver uniforms. User-provided UBOs don't yet have
variables outputted for them.
This requires moving MSL's ReduceInterfaceBlocks to the tree_ops
dir in order to change interface block definitions into struct
definitions.
Bug: angleproject:389145696
Change-Id: I27f3837b3d115f2ffac66cc545f3b60ca9f01cb6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6477564
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
4b69ba93
|
2025-04-28T16:45:56
|
|
WGPU: upload texture bind groups and configured samplers
GLSL samplers are split into separate sampler/texture variables
in WGSL. Before this CL, the WGSL translator generated shaders
that look like:
@group(1) @binding(@@@@@@) var ANGLE_sampler_samp2D :
sampler;
@group(1) @binding(@@@@@@) var ANGLE_texture_samp2D :
texture_2d<f32>;
@group(1) @binding(@@@@@@) var ANGLE_sampler_sampCube :
sampler;
@group(1) @binding(@@@@@@) var ANGLE_texture_sampCube :
texture_cube<f32>;
This CL replaces those with actual binding numbers
@group(1) @binding(0) var ANGLE_sampler_samp2D :
sampler;
@group(1) @binding(1) var ANGLE_texture_samp2D :
texture_2d<f32>;
...
Such that @binding(n*2) is the WGSL sampler variable corresponding
to the n-th GLSL sampler and @binding(n*2+1) is the WGSL texture
variable corresponding to the n-th GLSL sampler.
This CL then generates binding group layouts matching the above,
and uploads textures and configured samplers in bind groups.
This makes some of the deqp_gles2 tests 2d texture tests pass,
though some fail because they need a flipped y coordinate.
Not yet supported:
1. arrays of samplers
2. shadow samplers
3. cube textures
Bug: angleproject:389145696
Change-Id: I2ab18ae5ebb4d1289101266bd9451576aa04ce2a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6382272
Reviewed-by: Liza Burakova <liza@chromium.org>
Auto-Submit: Matthew Denton <mpdenton@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
828bec45
|
2025-04-26T16:12:56
|
|
Vulkan: Fix SPIR-V gen for constant constructors
... inside non-constant constructors of different basic type.
The SPIR-V generator proactively casts the elements of the inner
constructor to the type of the outer constructor, but it was mistakenly
using the original inner constructor's type id for the constant instead
of the cast type id.
Bug: chromium:413775106
Change-Id: I95e8b1dcc1ba36777eb4475042f0d106a6abe109
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6489041
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
555038b8
|
2025-04-23T12:47:02
|
|
Translator Fuzzer: Enable required options
Bug: chromium:409603851
Change-Id: I73067fcd3855f6cdcb6eea05b06bafa45d23fb19
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6482917
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
f355e2b3
|
2025-04-15T18:58:25
|
|
Vulkan: Remove preferDriverUniformOverSpecConst
This was practically true for every vendor on Android (where rotation
matters). For Qualcomm, it was also true due to a bug in version
checking and didn't seem to be causing any concerns. Where pre-rotation
is supported, it is better to enable this feature to avoid excessive
pipeline creation.
This change removes the feature and makes sure ANGLE always uses
uniforms for rotation instead of spec consts. While technically this
may have an adverse effect on platforms that never need pre-rotation,
the ability is retained for all vendors since pre-rotation is finding
its way into more platforms and would likely eventually be needed
everywhere anyway.
Bug: angleproject:42265878
Bug: angleproject:42262166
Change-Id: I4b64c04da46db08cfdd44b60789b66d93d8e8b17
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6459025
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: mohan maiya <m.maiya@samsung.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
5dd05578
|
2025-04-14T07:34:57
|
|
Revert "GL: Allow untranslated shaders to pass through on GLES"
This reverts commit 4e77552b86a89b449ada6d6c18f84285f5812b1d.
Reason for revert: breaks ChromeOS and fuzzers
Bug: angleproject:398857482
Original change's description:
> GL: Allow untranslated shaders to pass through on GLES
>
> Add an EGL extension EGL_ANGLE_create_context_passthrough_shaders which
> uses the NULL translator and passes the original shader to the driver.
> The parser is still used for shader reflection.
>
> Bug: angleproject:398857482
> Change-Id: I7c5fcc318c7e11931f78c08dcbf4764bf77d397d
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6297527
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Bug: angleproject:398857482, angleproject:410423936
Bug: chromium:410114655, chromium:410100607, chromium:410121218
Bug: chromium:410052365, chromium:410290507, chromium:410178288
No-Presubmit: true
Change-Id: I45b01960637a1cda05d21a7df6d07465f6a8f5e9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6448984
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
4e77552b
|
2025-02-24T18:04:32
|
|
GL: Allow untranslated shaders to pass through on GLES
Add an EGL extension EGL_ANGLE_create_context_passthrough_shaders which
uses the NULL translator and passes the original shader to the driver.
The parser is still used for shader reflection.
Bug: angleproject:398857482
Change-Id: I7c5fcc318c7e11931f78c08dcbf4764bf77d397d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6297527
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
02ae054c
|
2025-04-07T13:48:29
|
|
Translator: Fix init of inactive output variables
Bug: chromium:398401939
Change-Id: I0df494b945b8d0e805a62cf7645d06bf233f36ca
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6438495
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
d27a1fd0
|
2025-04-03T19:59:20
|
|
Compiler: Allow denorm float values in the lexer
This adds an option to preserve denorm values in the lexer,
skipping the explicit zero conversions for below range floats.
There are applications in the wild that expect to be able to
use denorm float values. They are typically immediately converted
to integer values, not used in floating point operations.
The option is only enabled for Vulkan backends.
Test: FloatLexTest, DenormFloatsToIntValues, app traces
Bug: b/406827038
Change-Id: Iab5a1a69a540b78ccbce8ea90b532d2d4976e29e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6432237
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
0e28c030
|
2025-04-02T17:26:28
|
|
ScalarizeVecAndMatConstructorArgs on WGSL shaders.
WGSL does not support mixing types in the constructors of vectors and
matrices. Use the ScalarizeVecAndMatConstructorArgs traverser to
scalarize these constructors and update it to cast to the destination
type if the inputs are not in that type already.
Bug: angleproject:395659799
Change-Id: I4c270f2b18e79393e3c187916f33ad719bc88a63
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6427067
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
fd722f9a
|
2025-03-31T23:23:26
|
|
Avoid emitting SampleCmp in discontinuous loops.
Apply fix by Mikkel Simonsen from Unity to use texture level 0 when
using textureLod with a shadow sampler inside a discontinuous loop.
Bug: angleproject:406190894
Change-Id: If02b687f15ec4c3e8bd1b8eece72098d498e2ce1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6421496
Auto-Submit: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
|
|
0d1478f3
|
2025-03-27T18:40:05
|
|
Fix dFdx() dFdy() in frag shader not work as expected
When render to FBO0, Y axis will flipping, Angle's compile module
will handle this, but only when glsl version > 300, that's a mistake
as glsl 100 also have dFdx/dFdy when have GL_OES_standard_derivatives.
Bug: angleproject:406819301
Change-Id: I656cfcfdeff1e80db374cfa083578adda6064e69
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6407233
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Auto-Submit: Neil Zhang <Neil.Zhang@arm.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|