src/compiler/translator/msl


Log

Author Commit Date CI Message
Shahbaz Youssefi 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>
Yuly Novikov 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>
Geoff Lang 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>
Shahbaz Youssefi 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>
Shahbaz Youssefi 362161fa 2025-03-28T11:22:46 Translator: Use unsized int for swizzle components Bug: angleproject:349994211 Change-Id: Ibee2c664f159960cf9bf860496038bbb32ae355a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6408391 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 03de46ef 2025-02-20T00:00:00 Metal: Remove divMatrixScalar polyfills MSL 2.3+ natively supports matrix by scalar division. Bug: angleproject:372169468 Change-Id: I2055ab8cfff01d8a52ddc0de4d5c3bc115271aed Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6289047 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen 0cfea380 2025-01-15T10:46:54 Rename sh::TSpan as general purpose angle::Span Span abstraction is useful for making buffer manipulation more consistent. The commit makes the Span available to all code until std::span can be used. Bug: angleproject:389951202 Change-Id: Id0c6b54bb6e75d3cc4e85af854d9e61b66906752 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6170997 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>
Alexey Knyazev 239ef680 2024-11-21T00:00:00 Metal: Support ANGLE_texture_multisample * Added explicit multisample texture creation support * Added support for SAMPLE_MASK frontend state * Adjusted Metal backend caps Fixed: angleproject:380475003 Change-Id: I90250e14da52869cb954b5a61d9c670e958a526c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6048958 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Kimmo Kinnunen bfa03a84 2024-11-19T13:32:31 Metal: Fix vec swizzles to bvecs on AMD Constructing bvecs explicitly from swizzles would produce double swizzles, and this would fail validation at validateNoSwizzleOfSwizzle. Fix by folding the expression passed to coersion bvec constructor. Cannot test more in isolation for now, since AddExplicitTypeCasts uses Metal specific SymbolEnv. Bug: angleproject:379758210 Change-Id: I175941747ef1c7acb8c88683c1188843a154aa8a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6034935 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Kimmo Kinnunen 8e9dc1a6 2024-11-19T11:08:31 Validate anonymous struct names with namespace Consider GLSL: struct { vec4 e; } g; struct sbbf { vec4 f; }; The struct name validation would fail if user chosen struct name would clash with a symbol name that ANGLE internally gave to an anonymous struct. Fix by importing Name abstraction from MSL backend. A symbol name is a pair (namespace, string). Move operator<<(std::ostream &os, const ImmutableString &str) to sh namespace because that is more natural for operator overloading name resolution. MSVC works with this. Bug: angleproject:379758201 Change-Id: Icc9b02aa8cb532e1d925e2fba4c45468f01b9144 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6035029 Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Shahbaz Youssefi c4533e0a 2024-11-20T16:21:40 Translator: Remove the `double` base type This is a desktop GL type, whose removal was left out of b16d105fc6. Bug: angleproject:37093746 Change-Id: I185beef71099aafc3e350efc3dad019e2a72c0e6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6039436 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Kimmo Kinnunen 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>
Kimmo Kinnunen bf29a047 2024-10-28T11:07:57 Metal: Remove uniform struct decl separation code Remove uniform specific struct declaration separation and anonymous struct naming code. This is already done by SeparateDeclarations. Removes code for NameEmbeddedUniformStructsMetal. Does not remove SeparateStructFromUniformDeclarations code as it is used for SPIRV. Bug: angleproject:375937551 Change-Id: I943d96897d97b23fd0f54155dc215a4490f63937 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5972994 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Kimmo Kinnunen 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>
Kimmo Kinnunen 0624b4fb 2024-10-31T20:59:20 Metal: Make ToposortStructs compile on c++17 Use .find() != .end() instead of .contains() for std::unordered_map. Bug: angleproject:375352601 Change-Id: I2e550354e1df3b390b74fdea29427fd3a0326fe8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5979775 Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Kimmo Kinnunen 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>
Kimmo Kinnunen 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>
Kimmo Kinnunen 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>
Alexey Knyazev 4aa12e9e 2024-10-07T00:00:00 Metal: Remove macOS 11.0 availability checks Chromium now requires at least macOS 11.0. This also implies MSL 2.3 support. Bug: angleproject:371829506 Change-Id: I6aaf4d9775bfe58747df28173d3931aa11fa8d25 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5912903 Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev af33337a 2024-10-07T00:00:00 Metal: Remove unused MSL helpers These helpers are never emitted. Bug: angleproject:372169468 Change-Id: I306164aaf4db1b7070e3e4a0599f0f02a1e29c7d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5912762 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev 0f7371ae 2024-10-07T00:00:00 Metal: Remove ANGLE_tensor macro Its replacement is never used. Fixed: angleproject:372053408 Change-Id: I1d54efcc1a1ecac1d0c6dae5ff7524b501297fe0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5912904 Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev cd10ad46 2024-09-30T00:00:00 Metal: Rework allowSamplerCompareGradient feature * AMD drivers may fail when a sample_compare function is used with explicit derivatives. To avoid such failures, the effective level is computed from the texture size, passed derivatives, and texture coordinates, if needed. The level value is then used for sample_compare instead of the explicit derivatives. * Apple2 GPUs do not support setting texture sampler compare state via Metal API. As a result, all sample_compare functions including those without LOD options do not work on Apple2 GPUs. This feature was attempting to incorrectly emulate a subset of sample_compare functions with a hard-coded compare state. There are no plans to support shadow samplers on Apple2 GPUs, as it would require non-trivial emulation, so this feature is no longer relevant for that platform. * Metal on macOS 10.15 only supports constant zero as the level parameter for sample_compare functions. Ignoring the passed derivatives and using zero LOD on old OS versions is a better fallback than dropping the derivatives altogether because many applications use the derivatives to set the level to zero anyway. Bug: angleproject:365066518 Bug: angleproject:368059227 Change-Id: I4028421b785ae49328b72658e0a9783275461779 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5903970 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev a921694b 2024-09-30T00:00:00 Metal: Support EXT_texture_shadow_lod Bug: angleproject:365108862 Change-Id: Ieb0b53253c5d9091e0c74baccf808622d9578d5f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5907407 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev d550d96f 2024-09-30T00:00:00 Metal: Remove allowSamplerCompareLod feature * Apple2 GPUs do not support setting texture sampler compare state via Metal API. As a result, all sample_compare functions including those without LOD options do not work on Apple2 GPUs. This feature was attempting to incorrectly emulate a subset of sample_compare functions with a hard-coded compare state. There are no plans to support shadow samplers on Apple2 GPUs, as it would require non-trivial emulation, so this feature is not needed. * Metal on macOS 10.15 only supports constant zero as the level parameter for sample_compare functions. Ignoring the requested level and using zero on old OS versions is a better fallback than dropping the parameter altogether because many applications set the level to zero anyway. Bug: angleproject:365066518 Bug: angleproject:368059227 Change-Id: I2cdc0bda5842842d62ad5663427da7f1f37bddda Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5907619 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 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>
Alexey Knyazev 7ff7775b 2024-09-19T00:00:00 Metal: Align internal texture wrapper names Used consistent internal names for all ESSL 3.00 texture wrappers. Bug: angleproject:368059227 Change-Id: I69c162d7b1557bb9a92cba902f4fdd5b4c30ee2d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5890621 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 371ab6d8 2024-09-19T00:00:00 Metal: Refactor texture wrappers * Removed variadic macros. * Removed invalid overloads. * Added MSL compile guards to not fail shader compilation on macOS 10.15. Bug: angleproject:368059227 Change-Id: I5376b410670a50cf700f1c33823f43c89c10b876 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5893780 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 86872374 2024-09-19T00:00:00 Metal: Refactor textureGrad wrappers * Removed variadic macros. * Removed an invalid overload. * Updated emitter to not output unused variants. * Added MSL compile guards to not fail shader compilation on macOS 10.15. Bug: angleproject:368059227 Change-Id: I816b8b96b264d0ca943bca566987755460b3a72f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5893778 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev 39b5f5fc 2024-09-19T00:00:00 Metal: Refactor textureLod wrappers * Removed variadic macros. * Removed an invalid overload. * Updated emitter to not output unused variants. * Added MSL compile guards to not fail shader compilation on macOS 10.15. Bug: angleproject:368059227 Change-Id: If15fcb0cb772e3ee2e2e1669f894fb8de4e76578 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5896390 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 80e5e611 2024-09-19T00:00:00 Metal: Refactor textureGradOffset wrappers * Removed variadic macros. * Removed invalid overloads. * Updated emitter to not output unused variants. * Added MSL compile guards to not fail shader compilation on macOS 10.15. Bug: angleproject:368059227 Change-Id: I47e0c04176bd9f4b6e6abcd266ae4c673135c93b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5893503 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev baf0c6b2 2024-09-19T00:00:00 Metal: Refactor texture[Lod]Offset wrappers * Removed variadic macros. * Removed invalid textureLodOffset overload. * Split bias variants into separate wrappers. * Updated emitter to not output unused variants. Bug: angleproject:368059227 Change-Id: I983d84685479e5154f2ecfb15b525c1acbb9e280 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5890517 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev bc9c772d 2024-09-19T00:00:00 Metal: Refactor textureProj[Offset] wrappers * Removed variadic macros. * Split bias variants into separate wrappers. * Updated emitter to not output unused variants. Bug: angleproject:368059227 Change-Id: I6e08e92dfbc2378bfc4ccd7760dbe28f6bc64f27 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5893163 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev b4ec5850 2024-09-19T00:00:00 Metal: Refactor textureProj(Grad|Lod)[Offset] wrappers * Removed variadic macros. * Updated emitter to not output unused variants. * Added MSL compile guards to not fail shader compilation on macOS 10.15. Bug: angleproject:368059227 Change-Id: If9d9479c056da6a76cff78c7c5b42101a0fcce1e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5893255 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Geoff Lang fe8c0390 2024-09-25T19:00:34 WGSL: Run SeparateCompoundStructDeclarations to name structs Borrow SeparateCompoundStructDeclarations from the Metal backend to separate struct definitions and name nameless structs. Refactor id generation into a callback. Bug: angleproject:42267100 Change-Id: I8ed6f13113a5d5e450d30ce187ce1df52e572000 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5889089 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Matthew Denton <mpdenton@chromium.org>
Alexey Knyazev c2051a2d 2024-09-19T00:00:00 Metal: Refactor texelFetch[Offset] and textureSize wrappers * Removed variadic macros from texelFetch[Offset] and textureSize function wrappers. * Updated emitter to not output unused variants. * Aligned parameter types with GLSL and MSL specs. Bug: angleproject:368059227 Change-Id: I7cbd6f60e70e0357aa5ca12d6adbe1064eed94fe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5876034 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev 95664631 2024-09-19T00:00:00 Metal: Fix OES_texture_3D texture function wrappers * Removed redundant variadic macros and templates for GL_OES_texture_3D functions. * Added missing texture3D function variants. * Emit texture3DProj variant with bias only when the GLSL function call has that parameter. Fixed all failures in KHR-GLES2.texture_3d.* tests. Bug: angleproject:368059227 Change-Id: I9c0b209988563710824c38d0535997e351bbd6bd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5875725 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 5eb71dc1 2024-09-19T00:00:00 Metal: Simplify ESSL 1.00 texture function wrappers * Removed redundant variadic macros and templates for ESSL 1.00 and GL_EXT_shader_texture_lod functions. * Emit texture2D, texture2DProj, and textureCube variants with bias only when the GLSL function call has that parameter. Bug: angleproject:368059227 Change-Id: I1b60d0b874a08dcdd0a92585b2642336134236e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5872916 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev e6c22c93 2024-09-19T00:00:00 Metal: Remove invalid ESSL 1.00 texture functions * 1D textures are not supported in GLSL ES * 2D textures do not support sampling with 3-component coordinates * Metal backend does not support rectangle texture type * Cubemap textures do not support sampling with projection Bug: angleproject:368059227 Change-Id: Iec33f4293d995b9f244274338d444604ffd23249 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5872915 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev e13cc7df 2024-08-30T00:00:00 Metal: Add shadow sampler overloads for textureProj[Offset] Added compile guards because sample_compare with bias is not defined for older MSL versions. Fixed: angleproject:354101888 Change-Id: I3972fabc9ebe7b7475343438272e57dcfed007f4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5828944 Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 7691cea7 2024-07-22T13:46:14 Vulkan: Remove seamful cubemap emulation Practically, the Vulkan backend is never expected to run on ES2 hardware. It _may_ for WebGL, but seamful cubemap emulation was disabled for webgl anyway. Bug: angleproject:354729454 Change-Id: Iafa20fbdbe232c4df4c777b12e7698ef7a87cf24 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5730143 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Alexey Knyazev b7d4c5d1 2024-07-04T00:00:00 Metal: Disable fast math if isinf or isnan are used Fixed: angleproject:42266714 Fixed: angleproject:42267063 Change-Id: Ibf6508ffc7d458a6b91b9218b2b488b6aa5b1001 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5678416 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 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>
ericali 44d98861 2024-05-17T23:55:13 Assertion under IdGen::createNewName. Remove code that tries to workaround double underscores symbols name that would be introduced if user defined symbols contain underscore prefix or suffix. To avoid unexpected clashes case like '_Data' and 'Data'. Bug: b/341206126 Change-Id: I59e72e59bf483c84f5e33a21f7737f82c31c6896 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5545479 Auto-Submit: Erica Li <lerica@apple.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Kimmo Kinnunen 6fe8a399 2024-04-22T18:11:30 Metal: Fix rewritten out variables with underscores Fix compilation in case of output variables start with underscores. Make name emission always emit MSL name ANGLE_{name}, so that GLSL `_e` and `e` cannot clash. This regressed in angleproject:8558. Bug: chromium:335744344 Change-Id: Ibae4dba4a24888acc1461582e69d48218ba11176 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5473412 Reviewed-by: Kenneth Russell <kbr@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Erica Li 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>
Roman Lavrov 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>
Kimmo Kinnunen 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>
Alexey Knyazev 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>
Kimmo Kinnunen 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>
Kimmo Kinnunen f7de39b6 2024-03-09T10:27:47 Make IntermRebuild available for all backends Move IntermRebuild from MSL to general translator code. Bug: angleproject:8590 Change-Id: Ie14651d09fbc320b27b94e48eb12d4ca8c79c68c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5358815 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Kimmo Kinnunen 4e9fbb36 2024-03-06T15:06:07 Metal: Remove AccessField(.., ImmutableString) The variant is incorrect, as ImmutableString does not describe the field name completely. Names belong to different namespaces denoted by SymbolType. Bug: angleproject:8558 Change-Id: I8332f574dfa8439d02af119fd858a6f5acdec73d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5349698 Commit-Queue: Kenneth Russell <kbr@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Kimmo Kinnunen 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>
Kimmo Kinnunen 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>
Alexey Knyazev cb7d3cc2 2024-02-09T00:00:00 Treat clip/cull distance built-ins as having side effects The sizes of these built-in arrays may be affected by indexing them with constant integral expressions so such operations should not be optimized out. Fixed related failures during MSL and HLSL translation. Fixed: angleproject:8525 Change-Id: I8460aa03b997ebc4142ee2d9f81eeefe13661336 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5285436 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang 9318a143 2024-01-11T15:58:44 Add __asm__("") statements to loop bodies in MSL. This prevents erasure of infinite loops during optimization passes. Bug: chromium:1513738 Change-Id: I84a305b5e7fd824531d9e3ebae5496ddec030bac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5191166 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 02aa605a 2024-01-25T00:00:00 Metal: Include only the <metal_stdlib> header Removed the logic for generating individual include macros as <metal_stdlib> provides all functions. Fixed: angleproject:8504 Change-Id: I8c83ca8cc2443a4b64e4e022a3a694c7643be569 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5237274 Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Alexey Knyazev 7d30cf9f 2024-01-22T00:00:00 Metal: Simplify sign function translation Check whether a float or an integer variant is needed and emit only what is necessary. Fixed: angleproject:8502 Change-Id: I7061a5faa7cf09519b30e64ff90c42bbe392908a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5234350 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 600a1a80 2024-01-22T00:00:00 Metal: Clamp vector element index references Ensured that vector elements passed by reference are within the number of vector components. Fixed: angleproject:8492 Change-Id: I2defbd8dfd418256ddb87f8ce1a74ac09a8a1b7b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5229957 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 2431d4df 2024-01-18T00:00:00 Metal: Skip array index clamp for constant values Do not wrap constant array indices with ANGLE_int_clamp when their values could be statically validated. Fixed: angleproject:8488 Change-Id: I3ad183475e1847cb7db1a07df3598c7d39767d7e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5220233 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev fc742305 2024-01-18T00:00:00 Metal: Simplify geometry functions translation Check whether a vector or a scalar variant is needed and emit only what is necessary. Reduced the generated MSL for: - atan/atan2 - length - distance - dot - normalize - faceforward - reflect - refract Fixed: angleproject:8487 Fixed: angleproject:8489 Change-Id: I3be39e55997062136aae2782269a65c0c738d6cf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5217532 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 473dd389 2024-01-04T00:00:00 Metal: Fix out/inout parameter aliasing Ensured that MSL-internal structs are included in the parameter aliasing checks. Fixed the following tests: dEQP-GLES2.functional.shaders.function .global_variable_aliasing_fragment .global_variable_aliasing_vertex dEQP-GLES3.functional.shaders.function .global_variable_aliasing_fragment .global_variable_aliasing_vertex Fixed: angleproject:7145 Change-Id: Ia1e40e72a69e2f91b480ef5fbb75ff0f0a1a772a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5176988 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev a6b9a744 2023-12-21T00:00:00 Metal: Implement vertex attribute aliasing When vertex attribute aliasing is supported, the external vertex input struct is filled post-link to account for potentially aliased attributes. Fixed the following tests: dEQP-GLES2.functional.attribute_location.bind_aliasing .cond_float .cond_vec2 .cond_vec3 .cond_vec4 .cond_mat2 .cond_mat2_offset_1 .cond_mat3 .cond_mat3_offset_1 .cond_mat4 .cond_mat4_offset_1 dEQP-GLES3.functional.attribute_location.bind_aliasing .cond_float .cond_vec2 .cond_vec3 .cond_vec4 .cond_mat2 .cond_mat2_offset_1 .cond_mat3 .cond_mat3_offset_1 .cond_mat4 .cond_mat4_offset_1 .max_cond_float .max_cond_vec2 .max_cond_vec3 .max_cond_vec4 .max_cond_mat2 .max_cond_mat3 .max_cond_mat4 Fixed: angleproject:6297 Change-Id: Ifa6b82e0d7d4e12115ec19e342cfb82ab4389f5a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5148210 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev e172c104 2023-12-07T00:00:00 Metal: Fix temporary array initialization Ensure that temporary array declarations have literal initializers to bypass Metal compiler issues. Fixed the following tests on Apple silicon: dEQP-GLES2.functional.shaders.indexing.tmp_array .float_const_write_dynamic_loop_read_fragment .float_const_write_dynamic_loop_read_vertex .float_const_write_dynamic_read_fragment .float_const_write_dynamic_read_vertex Fixed: angleproject:7058 Change-Id: Id4a360b0a5a15da43ce4626c6dfe03556cc9d0f0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5115898 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 6d9f0aee 2023-11-30T00:00:00 Metal: Ensure helper invocations when derivatives are used Set sample coverage mask to ensure that fragment shader helper invocations are performed when derivatives are used. Fixed the following tests on Apple silicon: dEQP-GLES2.functional.texture.mipmap .2d.projected.nearest_linear_repeat .2d.projected.linear_linear_repeat .cube.projected.linear_nearest .cube.projected.linear_linear dEQP-GLES3.functional.texture.mipmap .2d.projected.nearest_nearest_mirror .2d.projected.linear_nearest_clamp .2d.projected.linear_nearest_repeat .2d.projected.linear_nearest_mirror .2d.projected.nearest_linear_repeat .2d.projected.linear_linear_clamp .2d.projected.linear_linear_repeat .3d.projected.nearest_nearest_mirror .3d.projected.linear_nearest_clamp .3d.projected.linear_nearest_repeat .3d.projected.nearest_linear_clamp .3d.projected.nearest_linear_mirror .3d.projected.linear_linear_clamp .3d.projected.linear_linear_repeat Fixed: angleproject:8443 Fixed: angleproject:7023 Change-Id: I13fc52532b94de098dcf3e9f5f02d48a6c8913c7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5089131 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 5d70a41c 2023-11-30T00:00:00 Metal: Use a separate struct for last fragment data Used a separate MSL struct type for reading from framebuffer attachments to not fetch unnecessary draw buffers and to be able to set a sample mask. Removed TranslatorMSL::isSampleMaskAllowed() Ensured that the lastFragmentOut variable is not added when PLS does not use framebuffer fetch. Fixed: angleproject:8442 Change-Id: Ia3320fc6063277479b5aa9b7fea34457465add75 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5079450 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev edcfab40 2023-11-23T00:00:00 Metal: Implement textureCubeGrad transformation for AGX Wrapped all affected built-in function calls with helpers that transform derivative values. Fixed all *.texturegrad.* dEQP failures on Apple silicon. Fixed: angleproject:7021 Fixed: angleproject:8433 Change-Id: I16b023840ad267ab72d31fde3cb0fa7048e5310c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5071254 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev d696b40f 2023-11-23T00:00:00 Metal: Use precise tanh for highp result types When fast math is enabled, default tanh does not pass dEQP precision tests. Explicitly request precise tanh when the result type has high precision. Bug: angleproject:8287 Change-Id: I07c8c2638b5f0a51feacbeadb78382152a95b03c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5057298 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Geoff Lang f441e3ee 2023-11-01T15:22:55 Metal: Fix missing mix(float,float,bool) overload ANGLE has an ANGLE_mix_bool overload when the last parameter is a bool but it is not needed when the other parameters are scalar. Bug: chromium:1493243 Change-Id: I6ea904ed63055b49cf3eaded475eafa607ca5976 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4995278 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Geoff Lang 59f7467a 2023-11-01T14:53:42 Metal: Add missing ScalarMatrix ops Translations for the following built-ins were missing: scalar - matrix scalar + matrix scalar / matrix Bug: angleproject:7525 Change-Id: I5da85781829c195906cc689ffee55cb681f0337c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4995668 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev 777a46bf 2023-09-29T00:00:00 Metal: Fix power function translation GLSL definition of pow(x, y) excludes negative x, so it must be translated to metal::powr, not metal::pow. Fixed: angleproject:8366 Change-Id: Idaa66da73a149119e2a74beddc9a49e187d3e7af Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4901995 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Jonah Ryan-Davis 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>
Kenneth Russell 8ba04f1c 2023-08-05T00:48:35 Metal: disable fastmath less often. Stop disabling fastmath if atan is used in the shader. Application developers will surely prefer the significant performance improvement of the fastmath optimizations over corner-case differences in precision. Make disabling fastmath more precise: only if it's forcibly disabled as a driver bug workaround, or if the shader uses invariance and preserveInvariance is not available. Suppress the test: dEQP-GLES[23].functional.shaders.invariance.lowp.loop_2 which fails when fastmath is enabled for shaders using atan and invariance. Fixed: chromium:1320111 Change-Id: I6e33b14b1d05faedc15373f24af3e22a4074a35b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4754018 Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kenneth Russell <kbr@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 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>