src/compiler


Log

Author Commit Date CI Message
Geoff Lang c8c4109c 2022-05-02T11:29:24 HLSL: Disambiguate functions that have int/uint parameters. If a bit-shift expression is passed as a function parameter in HLSL, the compiler cannot tell if it is intended as a uint or int when doing overload resolution. Explicitly disambiguate functions that have int and uint parameters when generating the HLSL. Bug: chromium:1319332 Change-Id: I11c9518e060e9940550bbb04dd7cb953d99c2bb8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3621316 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Lingfeng Yang <lfy@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 5113ae8e 2022-04-29T22:42:59 Vulkan: Explicitly enable per-sample shading if `sample` used The Vulkan spec is not explicit about the `Sample` decoration implicitly enabling per-sample shading. While this is being corrected in the spec, the ARM Vulkan driver does not have this implicit behavior. A workaround is added such that the usage of the `sample` qualifier is reported, and used to explicitly enable per-sample shading through the API. Bug: angleproject:6876 Change-Id: Idb8345aacdcfa45cb37fefcd30aa5405168d21e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3615738 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Brian Osman 9200ba53 2022-04-26T12:05:07 Reland "Make SPIRV optional for Metal backend" Updated default conditions to match old behavior. This is a reland of commit 29287e1fc7ad3dff0619736a89e64b3598af8659 Original change's description: > Make SPIRV optional for Metal backend > > This allows clients (ie Skia) to build ANGLE without needing > all of the additional Vulkan dependencies. Developer builds > will continue to include both the direct and SPIRV paths, for > debugging purposes. > > Bug: angleproject:7155 > Change-Id: I1c38ee19e747df8b25fd2f8e8efa3b420a4d7766 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3605764 > Commit-Queue: Kenneth Russell <kbr@chromium.org> > Reviewed-by: Kenneth Russell <kbr@chromium.org> > Auto-Submit: Brian Osman <brianosman@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:7155 Change-Id: I439160f2e1f05a3dbe22df82336246a73a0a7d0b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3615012 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Cody Northrop 437053a1 2022-04-28T09:05:43 Revert "Make SPIRV optional for Metal backend" This reverts commit 29287e1fc7ad3dff0619736a89e64b3598af8659. Reason for revert: Possible root cause of Mac failures http://crbug.com/1320588 Original change's description: > Make SPIRV optional for Metal backend > > This allows clients (ie Skia) to build ANGLE without needing > all of the additional Vulkan dependencies. Developer builds > will continue to include both the direct and SPIRV paths, for > debugging purposes. > > Bug: angleproject:7155 > Change-Id: I1c38ee19e747df8b25fd2f8e8efa3b420a4d7766 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3605764 > Commit-Queue: Kenneth Russell <kbr@chromium.org> > Reviewed-by: Kenneth Russell <kbr@chromium.org> > Auto-Submit: Brian Osman <brianosman@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: chromium:1320588 Change-Id: Id160118146dad1b8f1af40c60ddefd717516cd1d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3614527 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Kenneth Russell <kbr@chromium.org> Auto-Submit: Cody Northrop <cnorthrop@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Brian Osman 29287e1f 2022-04-26T12:05:07 Make SPIRV optional for Metal backend This allows clients (ie Skia) to build ANGLE without needing all of the additional Vulkan dependencies. Developer builds will continue to include both the direct and SPIRV paths, for debugging purposes. Bug: angleproject:7155 Change-Id: I1c38ee19e747df8b25fd2f8e8efa3b420a4d7766 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3605764 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Auto-Submit: Brian Osman <brianosman@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 3b65b803 2022-04-27T11:04:22 Vulkan: Work around Qualcomm imprecision with dithering On qualcomm, sometimes the output is ceil()ed instead of round()ed. With ditering emulation affecting values, some dEQP tests fail due to the excessive change in value when dithering bumps the value slightly over to the next quantum. In this change, a workaround is added to round() the value before outputting it. Bug: angleproject:6953 Change-Id: Iae7df5ca20055b4db3185c6153f3c0bf4ba07f68 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3611064 Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Lubosz Sarnecki 039660a0 2022-04-14T13:32:33 Translator: Drop const from opaque parameter types `const` is ineffective on opaque types like sampler2D. That qualifier is now dropped as it was tripping SPIR-V gen up. New validation is added to make sure such parameters are not reintroduced. Test credit of Lubosz Sarnecki <lubosz.sarnecki@collabora.com> Test: angle_end2end_tests --gtest_filter="GLSLTest.ConstSamplerParameter*/*_Vulkan" Bug: angleproject:7201 Bug: angleproject:7205 Change-Id: I310a47a8eb162ddafb2ab44682520f546f8a5512 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3587345 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi c5271e8e 2022-04-04T23:28:35 Vulkan: Emulate GL_KHR_blend_equation_advanced Based on a change by Brandon Schade <b.schade@samsung.com> In the translator, when advanced blend is enabled, an input attachment is added. Based on the listed advanced blend equations, emulation code is added that performs those equations' functions. The blend equation itself is passed through a driver uniform. Note that the advanced blend extension only allows a single output to use advanced blend, and that should be at location 0. In the Vulkan backend, when advanced blend is used, the driver uniform to select the equation is updated and normal blending is disabled. Bug: angleproject:3586 Change-Id: Icc42e8be238d34fca149087eb9cfe616a7643a6b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3575738 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Stephen White 6803a2d0 2022-04-01T16:52:49 D3D11: implement SSBOs in pixel and vertex shaders. Since the 'u' register space for UAVs in pixel shaders is shared with render targets, and the number of render targets may vary depending on GL state, this required deferring register allocation until draw-time output in DynamicHLSL. Since non-compute shaders aren't able to immediately output the SSBO declaration, initial register allocation was broken out from ResourcesHLSL::shaderStorageBlocksHeader() into ResourcesHLSL::allocateShaderStorageBlockRegisters() with the former only called for compute shaders. These initial allocations are offset by the number of RTs at draw time. Since Raw UAVs may now be created at draw time for non-compute shaders, call markRawBufferUsage() from the Renderer11::draw*() entry points as it is from dispatchCompute*(). Bug: angleproject:7156 Change-Id: I6ab65af1ff36df0313e3c1f8f79661b1547ab9a2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3565562 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Stephen White <senorblanco@chromium.org>
Shahbaz Youssefi b169f6f9 2022-04-01T14:41:12 Vulkan: Fix no location decoration vs framebuffer fetch The input attachment index is identical to the location qualifier. If there's only one output, GLSL is allowed to not specify the location qualifier, in which case it would implicitly be at location 0. Bug: angleproject:6947 Change-Id: Ib8e31ab524f6f4d4fe1d3e49386a374724da06a1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3566221 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Lingfeng Yang <lfy@google.com>
Cody Northrop e10803f7 2022-01-20T09:03:55 Compiler: Allow deferred array sizing in geometry shaders Based on work by Brandon Schade <b.schade@samsung.com>. When a shader sets an array input size in a GS after declaring input variables, compilation would fail. Example shader - in vec3 normal[]; in vec3 view_dir[]; in float patch_dist[]; in float e_patch_wire_scale[]; ... layout(triangles) in; layout(triangle_strip, max_vertices=3) out; void main() { ... Update translator to handle such cases. Also add a new check that there are no remaining unsized arrays when compilation has completed. Test: GeometryShaderTest.DeferredSetOfArrayInputSize Bug: angleproject:3571 Bug: angleproject:7125 Change-Id: I4853832c27f9551284bcca92b98cbf5f3a63aaf5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3564259 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi cd3c74af 2022-03-30T11:48:41 SPIR-V Gen: Fix aliasing out parameters In ANGLE, when an unindexed lvalue was passed as an out parameter to a function, SPIR-V was generated such that the lvalue is passed in directly. A Skia test revealed a difference in SPIR-V and GLSL semantics where aliasing out parameters are expected to work on local copies until the end of the function. Bug: b/226904235 Change-Id: I476af01eb7d065272825967111cd208faf88c275 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3561278 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Zequan Wu 6a76aa3f 2022-03-28T09:40:36 Fix -Wunused-but-set-variable Bug: chromium:1309955 Change-Id: Ib5f7c73dd9a9f4ec27e43b0cb818864b2aaf48d1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3554363 Auto-Submit: Zequan Wu <zequanwu@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 7a85d114 2022-03-25T15:01:17 Use [[nodiscard]] on RAII classes Scoped* classes provide an RAII way of adding cleanup/restore state/etc in a robust way. Unfortunatley, it's very easy to mistakenly leave the variable name, leading to the destructor being called immediately instead of at the end of the scope: { ScopedX(parameters); // instead of ScopedX x(parameters); // Code here is run after destructor } The [[nodiscard]] attribute, if specified on the ScopedX class would lead to a warning (turned to error with -Werror). This change does that for classes named *Scoped* in ANGLE. Bug: chromium:1103817 Change-Id: I65c9922c9b4eba1f9c033e093fe8fe534648ab62 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3552092 Reviewed-by: Lingfeng Yang <lfy@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Hans Wennborg 0c23c72b 2022-03-25T17:19:37 Suppress -Wunused-but-set-variable in Bison-generated code Recent Clang versions have enhanced the warning, causing it to fire in preprocessor_tab_autogen.cpp and glslang_tab_autogen.cpp. Since those are generated by Bison, we can't fix the code and instead should suppress the warning there. Bug: chromium:1309955 Change-Id: I31aa83571162310bef47a7ce84841446713a2d04 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3550200 Commit-Queue: Hans Wennborg <hans@chromium.org> Auto-Submit: Hans Wennborg <hans@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Alexey Knyazev 18c36f8a 2022-03-19T19:22:08 Metal: Fix transform feedback with base instance Added TransformFeedbackTest.BaseInstance test case. Bug: angleproject:6963 Change-Id: Ie7b2a5dd2be456172505f07ea60ca291075bf07e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3536660 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 15fe0474 2022-03-21T00:06:38 Translator: Work around tool paranoia w.r.t repeated std::move An unknown diagnostic tool has flagged a usage in PruneNoOps, where an empty vector is std::move'd on multiple iterations of a loop, as error-prone. That was intended behavior. To silence the tool however, the empty vector declaration is moved inside the loop. Bug: chromium:1304953 Change-Id: Ie4b0c78e3f4a845db2b3b3a18d4ca095f0ba746b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3539443 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 40afbe4b 2022-03-20T23:39:57 Translator: Fix SimplifyLoopConditions producing dead code This causes the tree to fail validation. Dead code could be generated if the loop body ended in a branch. In such a case, no additional instructions are added to the transformed loop body after the original body. Bug: chromium:1300782 Change-Id: I4ec46c170ab5a45fa9b9b73d4e2b62c9c4fa24a3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3539442 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 7c616871 2022-02-01T15:12:53 Metal: Implement ANGLE_base_vertex_base_instance Includes command buffer and MSL translator updates. The DrawElementsInstancedBaseVertexBaseInstance tests from DrawBaseVertexVariantsTest suite fail for dynamic draw and stream draw buffer usages. Bug: angleproject:6963 Change-Id: I6caa144860356d5fc85948b72458bec282ea3a3b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3429819 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Shahbaz Youssefi 1e773db9 2022-02-22T10:51:15 Vulkan: Shader support for KHR_blend_equation_advanced Translator can accept the layout qualifiers for the advanced blend equation. No emulation code is currently generated, and ANGLE will initially rely on the corresponding Vulkan extension. Based on change by Brandon Schade <b.schade@samsung.com> Bug: angleproject:3586 Test: angle_unittests --gtest_filter=*KHRBlendEquationAdvanced* Change-Id: I3b728c5f144386d7030bbbb301ddb07daa1492b9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3481309 Reviewed-by: Brandon Schade <b.schade@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi e47a67e4 2022-02-22T11:40:23 Update Python scripts to run with Python 3 * Updated the scripts used in run_code_generation.py so they could be run with Python 3 with no errors. Bug: angleproject:5707 Change-Id: Iad7ff61a34ce53b6d54821cdd53ee846dc4afc3c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3482156 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 8dc9e83e 2022-02-16T21:48:53 Translator: Fix RunAtTheEndOfShader w.r.t discard RunAtTheEndOfShader wrapped main() if it ended in discard. However, it didn't account for the fact that the discard instruction could be wrapped in a block. This change makes RunAtTheEndOfShader more conservative w.r.t discard and has it wrap main() on any encounter of discard. The change additionally adds AST validation to ensure transformations don't generate dead code after branches. Test credit to Cody Northrop. Test: GLSLTest_ES3.ConstantConditionGuardingDiscard Test: GLSLTest_ES3.NestedUnconditionalDiscards Bug: angleproject:7033 Change-Id: Ie9d5210a5cfbb13449720a8a3f44666df9443d98 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3471014 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Kyle Piddington eeddb050 2022-01-27T11:36:10 Metal: Incorrect parenthization for assignment expressions Fix for Webgl tests conformance/ogles/GL/build/build_017_to_024.html Create intermediate values for assign-equals operations, as they cause issues on expansion later. Bug: angleproject:6489 Change-Id: I7fea162bd1f59c7c765868af739d6ddfc1c1747f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3421527 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
Brandon Schade 06edae72 2022-01-11T11:13:20 Vulkan: Allow duplicated block name in different shader interface In OpenGL ES 3.2 Shading Language specification(4.3.9), A block name is allowed to have different definitions in different shader interfaces within the same shader. Bug: angleproject:5557 Test: KHR-GLES32.core.tessellation_shader.single.max_patch_vertices Change-Id: I49f149cfd8f6f063fc5045aa154cc401d3e38cfb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3429684 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Brandon Schade <b.schade@samsung.com>
Alexey Knyazev 6d30de10 2022-02-05T02:25:36 Metal: Fix ANGLEUniformBlock alignment To pass Metal validation, the length of ANGLEUniformBlock structure must be aligned to 16 bytes. Bug: angleproject:5505 Change-Id: I1e2becaac48739966afb44e087fc4a70f7b21d02 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3440067 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Shahbaz Youssefi 4ac0f143 2022-02-02T16:28:01 Vulkan: Fix gl_LastFragData transformation This transformation was only called if gl_LastFragData was redeclared. Otherwise the ES3 version of the transformation (for inout variables) was being used which did not handle gl_LastFragData correctly. Bug: angleproject:6951 Bug: angleproject:6969 Change-Id: I188235bb9710a81c4010c9a170bce40cea8f414b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3434898 Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Alexey Knyazev 49488710 2022-02-02T14:57:04 Metal: Remove emulatedInstanceID The uniform variable is no longer referenced. Bug: angleproject:5505 Change-Id: I8de518592e045707d024eaa1c07999caf4b5da66 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3431079 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 72529c19 2022-01-31T14:37:42 Vulkan: Fix a few framebuffer fetch bugs A few fixes to framebuffer fetch: - The built-in symbol for coherent and non-coherent are now the same for gl_LastFragData, so extension check can choose one or the other. - The temporary variable used in a transformation is renamed to not be gl_LastFragData. - inout usage is now validated correctly for shader type and version. Bug: angleproject:6951 Bug: angleproject:6905 Bug: angleproject:6907 Change-Id: I9af341a3e8e01ed375a8230618184494813d3ece Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3427577 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Brandon Schade 38fada35 2022-01-27T18:16:18 Vulkan: Add support for OES_primitive_bounding_box Add OES version of the primitive bound box extension Bug: angleproject:3576 Test: dEQP-GLES31.functional.primitive_bounding_box.* Change-Id: Ie44d952992a68dfffd5c124dda8dd11069f0c1e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3425086 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Brandon Schade <b.schade@samsung.com>
Brandon Schade 91b383e8 2022-01-27T10:22:17 Translator: Emit warning when identifier has double underscores OpenGL ES Shader Language 3.2 specification states that two consecutive underscores (__) are reserved. It doesn't result in an error if used but could result in unintended behavior. Update the translator accordingly. Bug: angleproject:6577 Tests: ShaderVariableTest.DoubleUnderscores* Change-Id: Ice7e0eca4f770400061f4b8f7f65106cb1926f1a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3421411 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Brandon Schade <b.schade@samsung.com>
Brandon Schade 0a6c4310 2022-01-27T10:26:43 Vulkan: Fix incorrect gl_SamplePosition on ES3.2 gl_SamplePosition was not being replaced with angle's variable that takes into account surface rotation in ES3.2 shaders. This change fixes the translator to search for the ES3.2 variant of the builtin when the shader is an ES3.2 shader Test: dEQP-GLES31.functional.shaders.sample_variables.sample_pos.correctness.default_framebuffer --deqp-gl-config-name=rgba8888d24s8ms4 Test: dEQP-GLES31.functional.shaders.multisample_interpolation.interpolate_at_offset.at_sample_position.default_framebuffer --deqp-gl-config-name=rgba8888d24s8ms4 Bug: angleproject:5637 Change-Id: I2b56ee4d2196fa717748c7205745169de562cb22 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3421526 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 665ddccd 2021-12-09T23:06:39 Vulkan: Emulate dithering Dithering in OpenGL is vaguely defined, to the extent that no dithering is also a valid dithering algorithm. Dithering is enabled by default, but emulating it has a non-negligible cost. Similarly to some other GLES drivers, ANGLE enables dithering only on low-bit formats where visual banding is particularly common; namely RGBA4444, RGBA5551 and RGB565. Dithering is emulated in the fragment shader and is controlled by a spec constant. Every 2 bits of the spec constant correspond to one attachment, with the value indicating: - 00: No dithering - 01: Dither for RGBA4444 - 10: Dither for RGBA5551 - 11: Dither for RGB565 The translator appends code to the shader that, based on the format specified by the specialization constant, adds dithering to each color attachment output. A 2x2 Bayer matrix is used for dithering, indexed by gl_FragCoord.xy % 2. Bug: angleproject:6755 Change-Id: Ib45da5938e299b6626bff921119d63e7357dd353 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3374261 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Kyle Piddington c4a9d416 2022-01-05T15:28:11 Metal: Refactor to build without SPIR-V Refactor ShaderInterfaceInfoMap and constant names to thier own files, allowing Webkit to build without needing to compile SPIRV code via mtl_glslang_utils.cpp. Bug: angleproject:6782 Change-Id: I7a9c7e387145c95807f780e24bd2764e0efb5709 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3364970 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
John Cunningham 45237a04 2022-01-11T00:14:01 Metal: Fix undefined behavior of depth write Writing to an unbound depth attachment is undefined behavior in Metal. Fix this by emitting a function constant to guard depth buffer use in fragment shaders. Bug: angleproject:6865 Change-Id: Id7c10d0aeb349aacfe09c397bc292a71199ab50a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3380304 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Brandon Schade aadc6434 2022-01-24T18:28:19 Vulkan: Fix to correctly redefine gl_PerVertex in GS Angle translator structures were inconsistent of data lookup of gl_PerVertex data when it is user defined. Bug: angleproject:5579 Test: KHR-GLES32.core.geometry_shader.api.getProgramiv3 Test: GLSLTest_ES31.PerVertex* Change-Id: Ied9ea25ce86ade29261f4f75ce0b48af15061760 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2962352 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Brandon Schade <b.schade@samsung.com>
Jamie Madill cb96c236 2022-01-26T18:53:55 Revert "Vulkan: Enable framebuffer fetch on SwiftShader." This reverts commit 5107231939b5e04d3d5e4376176db42c3ae60193. Reason for revert: Fails new code paths in Chrome+Skia. Bug: angleproject:6947 Original change's description: > Vulkan: Enable framebuffer fetch on SwiftShader. > > This also fixes a bug with non-coherent fetch in the symbol table. > > Bug: angleproject:6947 > Bug: angleproject:6948 > Change-Id: I190b2e0cddf1bc1b53a79079d3e2f79ccbb40d15 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3412998 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Cody Northrop <cnorthrop@google.com> > Commit-Queue: Jamie Madill <jmadill@chromium.org> Bug: angleproject:6947 Bug: angleproject:6948 Change-Id: I8bd6c55598552b733547e45c854f6d55768d2b65 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3417503 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 51072319 2022-01-25T10:41:25 Vulkan: Enable framebuffer fetch on SwiftShader. This also fixes a bug with non-coherent fetch in the symbol table. Bug: angleproject:6947 Bug: angleproject:6948 Change-Id: I190b2e0cddf1bc1b53a79079d3e2f79ccbb40d15 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3412998 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 0f00fbae 2022-01-21T00:28:48 Translator: Make vec/matrix size getters unsigned TType stored type's primary and secondary sizes as `unsigned char`, but the getters returned `int`. This caused unnecessary casts when the size was passed from one TType to another, as well as comparisons with other unsigned numbers. This change specifies the type of these members as `uint8_t` and makes the getters return the same type. The call sites are accordingly adjusted to remove unnecessary casts, use the correct type in local variables, and add casts when passed to ostream::operator<<. Bug: angleproject:6755 Change-Id: Ia4d86bd4ccb5c1a2ae1e10a0085a5166c3a6bcf7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3402850 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Brandon Schade 7dda50fc 2022-01-13T12:09:20 Add frontend for ANDROID_extension_pack_es31a - Add entry to registry_xml file - Add handling in the DirectiveHandler Bug: angleproject:3608 Change-Id: I1cc32a4a97fd9974f65786a9a972b4b541abf658 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3388405 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Brandon Schade <b.schade@samsung.com>
Brandon Schade 28f223ac 2022-01-14T16:11:32 Vulkan: Add missing ESSL 3.2 builtin functions Builtin functions from the "OES_shader_image_atomic" and "OES_texture_storage_multisample_2d_array" extensions were missing from ESSL 3.2 builtins. Bug: angleproject:3578 Bug: angleproject:3583 Change-Id: Id372f0dcffee1eb376c66b9e4886ed50a08b1b0e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3391048 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Brandon Schade <b.schade@samsung.com>
Alexey Knyazev f4b0a95f 2021-12-16T02:38:26 Metal: Implement EXT_shader_texture_lod Added CubeMapTextureTest.SampleCoordinateTransformGrad_ES3 Bug: angleproject:6815 Bug: angleproject:6824 Bug: angleproject:3814 Bug: angleproject:6891 Change-Id: I9007bf8ba91309fb9b597e2d1bd33281ff59644a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3343488 Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Brandon Schade 0ab15998 2022-01-07T09:59:23 Translator: Don't promote precision for assignment operation lvalues Assignment operations should use the precision of their lvalue-expression, even if their rvalue-expression has higher precision. Bug: angleproject:6889 Change-Id: I9a105631defb6c1e27870c96517aa66fbd95543e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3381906 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Brandon Schade <b.schade@samsung.com>
John Cunningham 0b02a592 2022-01-10T20:27:25 Metal: Generated Metal shaders do not compile offline Add an explicit include for the Metal stdlib to fix missing symbol errors Bug: angleproject:6886 Change-Id: Ie84ef1c16f964387b63e36490d7e9abc0c1763f2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3379238 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Shahbaz Youssefi 095d7c0a 2022-01-06T01:20:53 Translator: Clean up spec const / driver uniform types Bug: angleproject:6755 Change-Id: I8fb1557a5e29fcc28d5cb2f3aaa2c4a14b72583d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3369125 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Kyle Piddington f13f440e 2021-12-15T15:11:05 Reland: Metal: Fix Webkit warnings in ANGLE build Fix nullable warnings, unused functions Add in additional function specification to FormatStringIntoVector to correctly fix warning Bug: angleproject:6781 Change-Id: I26af2d698f14d353832802aa7b5ce34c5a1f4b95 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3366796 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
Shahbaz Youssefi 4114fe23 2021-11-20T22:05:56 Vulkan: Simplify transform feedback emulation logic In [1], the program is transformed to not output transform feedback logic when transform feedback is inactive. With that change, it's no longer necessary to dedicate a driver uniform to indicate if transform feedback is active. [1]: https://chromium-review.googlesource.com/c/angle/angle/+/3294661 Bug: chromium:1209285 Change-Id: Ica725d0da08e2676f442fe6307962d367b443535 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3294702 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 1da7e3af 2021-12-21T15:55:38 Revert "Metal: Fix Webkit warnings in ANGLE build" This reverts commit 6706799186683dd3733c4610de09d84721aa08c8. Reason for revert: Includes pragma that disables a warning. Original change's description: > Metal: Fix Webkit warnings in ANGLE build > > Fix nullable warnings, unused functions > > Bug: angleproject:6781 > Change-Id: I063331e60d31a55b3cc9df0b41ace014d7d13659 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3343174 > Reviewed-by: Kenneth Russell <kbr@chromium.org> > Commit-Queue: Kenneth Russell <kbr@chromium.org> Bug: angleproject:6781 Change-Id: Id5fce2afd0381030a974871b99e8adf075677bd1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3352086 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Gregg Tavares b26bb13a 2021-12-15T15:46:00 Metal: Remove references to xfbActiveUnpaused uniform Metal chooses a shader with or without support for transformfeedback so there's no point in checking in the shader if it's enabled or not. Bug: angleproject:6823 Change-Id: Iacd26b1e55b311a7cc7987dcd8b2f8c0c8727d62 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3343179 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Kyle Piddington 67067991 2021-12-15T15:11:05 Metal: Fix Webkit warnings in ANGLE build Fix nullable warnings, unused functions Bug: angleproject:6781 Change-Id: I063331e60d31a55b3cc9df0b41ace014d7d13659 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3343174 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Gregg Tavares 1642b4a3 2021-12-10T16:01:10 Metal: Fix Instanced Draw feature support on Simulator Bug: angleproject:6786 Change-Id: I4c567bf2ec61df581ae0e8eeb1c36c7d37e15d04 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3331637 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares 2e669566 2021-12-09T18:21:02 Metal: Refactors from Webkit Mostly renaming, typos, cleanup bug: angleproject:6787 Change-Id: Ic71c296d7849244cae2ca29b264a10cb96bca612 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3329261 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Yuly Novikov f64f9546 2021-12-07T20:17:32 Reland "Decouple gl_BaseVertex/gl_BaseInstance uniforms" This reverts commit 10e5f34d1439f0bcd5b30bea5bfbf6bdaafd4935. Reason for revert: exonerated from flaky crash suspect Original change's description: > Revert "Decouple gl_BaseVertex/gl_BaseInstance uniforms" > > This reverts commit 36bf1ebe5e9500704dd235254bd22a1f2bbd7059. > > Reason for revert: suspect causing flaky crashes > > Bug: angleproject:6763 > > Original change's description: > > Decouple gl_BaseVertex/gl_BaseInstance uniforms > > > > These are builtin uniforms removed in > > https://github.com/KhronosGroup/WebGL/pull/3278 > > > > Decouple them from the original ANGLE_base_vertex_base_instance > > extension. > > > > Make a new ANGLE_base_vertex_base_instance_shader_builtin > > extension for these builtin uniforms. > > > > Bug: angleproject:3402 > > Change-Id: I77b93917976ce435db9c578c0ade37bff18a42b0 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3290304 > > Commit-Queue: Shrek Shao <shrekshao@google.com> > > Reviewed-by: Geoff Lang <geofflang@chromium.org> > > Reviewed-by: Kenneth Russell <kbr@chromium.org> > > Bug: angleproject:3402 > Change-Id: I75830baa14cf4e7c53750fd14ff76501145b4823 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3315610 > Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> > Reviewed-by: Yuly Novikov <ynovikov@chromium.org> > Reviewed-by: Kenneth Russell <kbr@chromium.org> > Commit-Queue: Shrek Shao <shrekshao@google.com> Bug: angleproject:6763 Bug: angleproject:3402 Change-Id: Ie436dc5d55364e464897d407a53b793941cd5d0b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3321703 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Shrek Shao 10e5f34d 2021-12-04T00:10:21 Revert "Decouple gl_BaseVertex/gl_BaseInstance uniforms" This reverts commit 36bf1ebe5e9500704dd235254bd22a1f2bbd7059. Reason for revert: suspect causing flaky crashes Bug: angleproject:6763 Original change's description: > Decouple gl_BaseVertex/gl_BaseInstance uniforms > > These are builtin uniforms removed in > https://github.com/KhronosGroup/WebGL/pull/3278 > > Decouple them from the original ANGLE_base_vertex_base_instance > extension. > > Make a new ANGLE_base_vertex_base_instance_shader_builtin > extension for these builtin uniforms. > > Bug: angleproject:3402 > Change-Id: I77b93917976ce435db9c578c0ade37bff18a42b0 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3290304 > Commit-Queue: Shrek Shao <shrekshao@google.com> > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Reviewed-by: Kenneth Russell <kbr@chromium.org> Bug: angleproject:3402 Change-Id: I75830baa14cf4e7c53750fd14ff76501145b4823 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3315610 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Shrek Shao <shrekshao@google.com>
Shrek Shao 36bf1ebe 2021-11-17T13:31:17 Decouple gl_BaseVertex/gl_BaseInstance uniforms These are builtin uniforms removed in https://github.com/KhronosGroup/WebGL/pull/3278 Decouple them from the original ANGLE_base_vertex_base_instance extension. Make a new ANGLE_base_vertex_base_instance_shader_builtin extension for these builtin uniforms. Bug: angleproject:3402 Change-Id: I77b93917976ce435db9c578c0ade37bff18a42b0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3290304 Commit-Queue: Shrek Shao <shrekshao@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Mohan Maiya 6c172e4b 2021-11-20T16:27:14 Add support for memory cleanup on process exit This patch adds a callback to cleanup memory on process exit. Bug: angleproject:6723 Test: Android CTS WrapperTest.testThreadCleanup Change-Id: Ia517d4c6ae280ddc1f17a3b6f77d437aaaad0678 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3294581 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Shahbaz Youssefi 7d33e71a 2021-11-15T11:20:25 Vulkan: SPIR-V Gen: Don't generate names for constants Multiple constant variables can have the same value, and they are coalesced to the same SPIR-V id. It's not useful to attempt to generate multiple constants with different names, especially as those names don't make it into the SPIR-V-Cross-generated GLSL. Additionally, most constants in the translator don't retain their name, only the ones that are not folded do (and which are folded is a rather arbitrary decision). By generating names for these constants, the SPIR-V gen code was introducing a bug where multiple OpNames could be generated for the same OpConstant* id. This change removes OpNames generated for constants in the first place. Bug: angleproject:6644 Change-Id: Ife2f4bee8e2eb095dc0b22994420ee1dfc6023c6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3282425 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Gert Wollny 5f7c3ba6 2021-11-01T13:27:15 Capture/Replay: Don't force initialization of FS inout vars Since these variables are to be considered inputs as well as outputs initializing them would overwrite the valid input values, hence skip initialization. Bug: angleproject:6608 Change-Id: Id8baf856a23ac84d18c61dd54cd6095128190075 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3253377 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Shahbaz Youssefi 52d6e363 2021-11-03T12:46:10 Translator: Fix zero-init of nameless I/O blocks Bug: angleproject:6609 Change-Id: I680fec85d53709f9abd3680a9dc5794ecfae6588 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3260326 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi e10768f0 2021-11-03T12:23:11 Translator: Fix zero-init of I/O block arrays Bug: angleproject:6609 Change-Id: I8245e868fe6bc4798e74088916e1d8cdd0727b6b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3260325 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Kyle Piddington 0e9e321b 2021-11-01T17:04:05 Metal: Anonymous unused uniform structs not named. Due to some upstream changes, unused uniform structs are not being given a name. These structs cause compilation failures, which has completely caused shadertoy.com to fail to render. Skip the check when naming embedded structs to allow uniform struct types to still be named, even when no uniform exists. Unskip targeted tests on the Metal backend which were added previously in Issue 6641. These still need to be fixed more generically for the Vulkan backend. Also suppress flaky WebGLCompatibilityTest.RG32FTextures test on Mac Intel OpenGL, which affected this CL. Bug: angleproject:6642 Bug: angleproject:6641 Bug: angleproject:6570 Change-Id: I598fc212f4db3d3b7c5617bd8a87f8b7db60706c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3258341 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Stephen White 0b56267f 2021-11-02T12:25:40 Implement ANGLE_FALLTHROUGH macro. Use it instead of ABSL_FALLTHROUGH_INTENDED. (ANGLE shouldn't use absl unless angle_enable_absl is true. This is breaking the roll of ANGLE into Dawn.) Bug: angleproject:6647 Change-Id: I47f9a00841c4605fca52b17eeb68c0b1da5004c0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3258008 Commit-Queue: Stephen White <senorblanco@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Kyle Piddington 50fc2909 2021-10-27T21:37:02 Merge Webkit up to Oct 27 2021 Merge the following commits from Webkit. This change merges webkit from the following git commits Previous: commit 703b234524e75109ca3e94febbf63098314022f5 Author: Alex Christensen <achristensen@webkit.org> Date: Tue Sep 28 16:22:30 2021 +0000 Mostly fix Mac CMake build https://bugs.webkit.org/show_bug.cgi?id=230868 Current: commit 43d2e637f84b1e6b75c139ac64c26ca108b4f12f Author: Kimmo Kinnunen <kkinnunen@apple.com> Date: Wed Oct 27 17:43:38 2021 +0000 REGRESSION (Safari 15): Poor WebGL performance on https://downloads.scirra.com/labs/particles Commits: commit 8238f462c96e515dabd3db0e26c143b18f47340c Author: Kyle Piddington <kpiddington@apple.com> Date: Wed Oct 6 21:45:18 2021 +0000 Shadertoy "truchet district" fails to compile with error: Internal error compiling shader with Metal backend" commit 2fcb9af290e4b6c804f11ad4359555507c1492f9 Author: Kyle Piddington <kpiddington@apple.com> Date: Thu Oct 14 21:14:26 2021 +0000 https://tankionline.com/play/ html5 engine not working: crashes. (Metal shader not working) https://bugs.webkit.org/show_bug.cgi?id=231490 commit e11955a258380a875115ded16ab8963142c4023b Author: Kyle Piddington <kpiddington@apple.com> Date: Fri Oct 15 23:57:12 2021 +0000 REGRESSION (r283667): webgl/2.0.0/deqp/functional/gles3/lifetime.html fails https://bugs.webkit.org/show_bug.cgi?id=231682 commit 43d2e637f84b1e6b75c139ac64c26ca108b4f12f Author: Kimmo Kinnunen <kkinnunen@apple.com> Date: Wed Oct 27 17:43:38 2021 +0000 REGRESSION (Safari 15): Poor WebGL performance on https://downloads.scirra.com/labs/particles https://bugs.webkit.org/show_bug.cgi?id=230749 Bug: angleproject:6630 Change-Id: Icca411dc429538f839f05834f1851fbc54ef8a1d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3248573 Commit-Queue: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill c31855ea 2021-10-28T13:29:17 translator: Always report gl_FragData array size. Previously we would report it as size 1 always if the extension was missing. This was breaking a dEQP. The test may have a bug, but we need to work around the issue until the upstream test is fixed. See https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/3259 Bug: angleproject:6566 Change-Id: I5ac654f472f0e227d63804896ecc388081bec5e8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251586 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 5c914b57 2021-10-28T13:27:04 Vulkan: SPIR-V Gen: Fix float+matrix Found by a fuzzer, float+matrix was not handled correctly by the SPIR-V output. Bug: chromium:1264212 Change-Id: I09b13c3e48374621228f5fab4de68c33973ddfd4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251585 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Brandon Schade 5da062ba 2021-10-06T11:15:00 Translator: Fixed textureGatherOffsets validation The parser only considered the case where the input to the textureGatherOffsets() function is an aggregate constructor node, but not if it is a pre-initialized constant variable. Added code to handle the constant variable case. Tests:KHR-GLES32.core.gpu_shader5.texture_gather_offsets_color KHR-GLES32.core.gpu_shader5.texture_gather_offsets_depth Bug: angleproject:5362 Change-Id: Ib1dd3450071341082ea6f0f2a243c3bb3ef6b95a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3217852 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Brandon Schade <b.schade@samsung.com>
Kyle Piddington db83279a 2021-10-27T10:45:23 Metal: Use 'fast' normalize to match DEQP expectations Normalize' has a fast math option that more conformantly deals with INF in normalize functions. Use metal::fast::normalize instead of metal::normalize This also matches SPIRV-Cross behavior for normalization Bug: angleproject:6629 Change-Id: I61392ecd6f61b612d21f2832e07a135e26b53ad6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3248145 Commit-Queue: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org>
Shahbaz Youssefi 55bd8d8f 2021-10-26T10:38:28 Translator: Fix precision bug in HLSL generation Bug: chromium:1263487 Change-Id: I60bc3dc93867e4269756b6f54eb39cf29ad77d5f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3244887 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 066fb91b 2021-10-18T15:31:27 Vulkan: SPIR-V Gen: Handle scalar(const) produced by index clamp Normally scalar(const) is folded into a constant. The index clamp transformation may produce such a code where the index looks dynamic at first (for example `false ? uniform_value : constant`), but becomes constant after folding. This change makes SPIR-V generation robust in that case. A potential future change could avoid the clamp entirely by making FoldExpressions adjust the op of the EOpIndexIndirect node whose index is being replaced with a constant with EOpIndexDirect (and apply the clamp on the argument). Bug: chromium:1260651 Change-Id: I552b7527d821d1cb52e0e53212cc481285674861 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3226311 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi ef237faf 2021-10-18T16:22:40 Translator: Validate precision for function args In fragment shaders, float does not have a default precision. Any declaration of this type must therefore specify the precision if a default one is not provided. This was not validated for function arguments. Bug: chromium:1255089 Change-Id: I0d17e226ec88610692ec7dd18793cf4d471f12e7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3226314 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 7f87a326 2021-10-18T13:06:29 Vulkan: SPIR-V Gen: Fix crash in array of struct constant Bug: chromium:1260690 Change-Id: I51fe85a2ebc23c3fcaa3c961c4ebf84688bbed31 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3226309 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Cody Northrop e2e77baa 2021-10-18T16:04:43 Revert "Revert "Translator: Remove the SH_VALIDATE flag"" This reverts commit 701e8892f45e6f416dcbb0d23a155d346d0280fa. Reason for revert: Chromium dependency fixed in http://crrev/c/3214440 Original change's description: > Translator: Remove the SH_VALIDATE flag > > The SH_VALIDATE flag is a noop, defined as zero (0). > > Also move option descriptions up in the file. > > Bug: angleproject:6501 > Change-Id: I898106eb68b4508d8f94534cbff66652a69f4f3e > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3207360 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Cody Northrop <cnorthrop@google.com> Bug: angleproject:6501 Change-Id: I4d1514d6ac04e5bedf3624facf8e9339828fa291 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3229955 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 57b73c07 2021-10-14T15:51:18 Vulkan: SPIR-V Gen: TODO clean up This change removes a number of stale TODOs. Bug: angleproject:4889 Change-Id: If21d55717e61383ffdd58a7f88da5961988e035f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3223643 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi b3d77208 2021-10-14T15:38:51 Vulkan: SPIR-V Gen: Make unfolded constants SPIR-V constants If a constant is not folded by the translator, for example because it's an array, this change makes sure that it becomes a constant in SPIR-V anyway. This is particularly important to support cases where a constant is required, for example as argument to textureGatherOffsets(). Bug: angleproject:4889 Bug: angleproject:5362 Change-Id: Ic43e4be13a8917bb100ea64902ba90048cfbb9ee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3223642 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi f3d5dac3 2021-08-23T17:25:15 Vulkan: SPIR-V Gen: Drop dependency to glslang The SPIR-V gen path is now made default. Compilation through glslang is still supported for debugging, and is enabled on the GLSL* end2end tests for smoke testing. On release builds, glslang is not supported. To test with glslang, add the following gn arg (only necessary if dcheck is disabled): angle_enable_spirv_gen_through_glslang = true Then enable the generateSPIRVThroughGlslang feature. This can be done by setting an environment variable: ANGLE_FEATURE_OVERRIDES_ENABLED=generateSPIRVThroughGlslang ./angle_deqp_gles2_tests Binary size saving: - 1.3MB on Linux (SPIR-V gen itself: 240KB) - 730KB on Android (SPIR-V gen itself: 140KB) Perf tests: - LinkProgramBenchmark.Run/vulkan_compile_single_thread * Through glslang: truncated mean: 1287033.36 * Direct SPIR-V Gen: truncated mean: 244495.91 (~80% reduction) - LinkProgramBenchmark.Run/vulkan_compile_multi_thread * Through glslang: truncated mean: 4565894.83 * Direct SPIR-V Gen: truncated mean: 1158164.10 (~75% reduction) Bug: angleproject:4889 Bug: angleproject:6210 Change-Id: I486342702977c8114e90073b97183aba115a8b2d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3115140 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Steven Noonan 01341f94 2021-10-11T19:26:07 D3D11: implement EXT_clip_control This implements EXT_clip_control for the D3D11 renderer, so that I can use a reversed-Z depth buffer with ANGLE. Tested with angle_deqp_gles2_tests.exe --deqp-egl-display-type=angle-d3d11 --deqp-case=dEQP-GLES2.functional.clip_control.* and angle_end2end_tests.exe --gtest_filter=*D3D11* Bug: angleproject:6554 Change-Id: I1d11cd04a6654c28530b11104470f0cad0009abe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3218659 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi bcc89703 2021-10-07T11:26:42 Translator: Remove disableValidateFunctionCall from transformation This validation is disabled in three transformations and re-enabled afterwards. Two of these benefit from the simplicity it brings, and this change removes it from the other transformation. Bug: angleproject:6506 Change-Id: I946b547ed0e2ed39062914a7771e9635ff5e406d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3212289 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Tim Van Patten 4349703b 2021-10-06T11:00:53 Compiler: Remove unnecessary TODO Remove the TODO related to removing the global pool allocator, since that work won't be chased any further. For more details in this area, see: http://anglebug.com/1286 Bug: angleproject:6497 Change-Id: Ie9952e1c0e481c8d553cfdcf4a1d8ded8b64a95b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3208510 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Lingfeng Yang 9ba5dcf6 2021-10-07T06:56:14 Vulkan: Fix inconsistency in half render area width/height The half render area rotation matrix should be removed. DrawableArea is constant over rotations. The frag coord rotation matrix is still needed because the frag coord generated by GPU is still rotated. Test: DISPLAY=:0 out/Debug/angle_deqp_gles3_rotate90_tests Using test config with: linux nvidia debug vulkan prerotation prerotation270 Test: Cuttlefish SwANGLE ./cts-tradefed run cts -m CtsDeqpTestCases -t dEQP-GLES3.functional.shaders.builtin_variable.fragcoord_xyz Bug: angleproject:6504 Change-Id: I37a6308fdb7586200b19a6138affc78c2c329a96 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3212427 Commit-Queue: Lingfeng Yang <lfy@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Yuly Novikov 701e8892 2021-10-08T02:56:38 Revert "Translator: Remove the SH_VALIDATE flag" This reverts commit 4ca3d7d64388f043dab688d536776495df40532d. Reason for revert: breaks roll into Chromium crrev.com/c/3213239 SH_VALIDATE is used in gpu_unittests. Original change's description: > Translator: Remove the SH_VALIDATE flag > > The SH_VALIDATE flag is a noop, defined as zero (0). > > Also move option descriptions up in the file. > > Bug: angleproject:6501 > Change-Id: I898106eb68b4508d8f94534cbff66652a69f4f3e > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3207360 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Cody Northrop <cnorthrop@google.com> Bug: angleproject:6501 Change-Id: Ia9983eac58a07e2a6e3d5fe4d1bfccfb9c48ccd0 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3212709 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Cody Northrop 4ca3d7d6 2021-10-05T23:10:09 Translator: Remove the SH_VALIDATE flag The SH_VALIDATE flag is a noop, defined as zero (0). Also move option descriptions up in the file. Bug: angleproject:6501 Change-Id: I898106eb68b4508d8f94534cbff66652a69f4f3e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3207360 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi daaaba0a 2021-10-04T22:28:56 Translator: Fix uniform/struct separation for anonymous arrays When a uniform array of anonymous structs was separated into a struct declaration and uniform array, the uniform symbol was being replaced, but not the intermediate nodes that index it. This caused an AST validation error. Bug: angleproject:4740 Change-Id: Ib9d0115bd01c39d1a007f644e46b5e35c12c9304 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3204590 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi dde409be 2021-10-04T22:05:47 Translator: Produce error on func(void, int) If void is specified, another parameter cannot follow. This change ensures that this produces an error. Bug: angleproject:6338 Change-Id: I18602ea4b52c96e498f4f2dc627d4ba2210d6fa7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3203795 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Kyle Piddington 54d4bfe5 2021-09-28T17:27:57 Update ANGLE Metal to Webkit at Sept 29 2021 This commit merges changes from Webkit into ANGLE upstream. The following commits were used: Current: https://git.webkit.org/?p=WebKit.git;a=commit;h=e01d0bda8f4b7dc2fd834b92802d15d8c15735f Previous: https://git.webkit.org/?p=WebKit.git;a=commit;h=492f078198748e8ff248eea0bb979cf79e5f5adfj The following commits were merged in from the Webkit Repository: (Hashes from git://git.webkit.org/WebKit-https.git) 03ea44c78ce5665d4ec9add271260121cbc7bc6c Problems with drawElements in some conditions https://bugs.webkit.org/show_bug.cgi?id=230107 c8dc8e0c4d1109d39a62eb197b45e95132380290 ANGLE Metal: single-component swizzles do not compile https://bugs.webkit.org/show_bug.cgi?id=230472 7285dbaaf5af15877d6c332b30ef7a4d67225460 webgl-compressed-texture-s3tc-srgb.html fails on Intel+AMD Metal https://bugs.webkit.org/show_bug.cgi?id=229941 4c72f92967ecd2a095666fef431384c4f5f60fb4 fragcolor-fragdata-invariant.html fails https://bugs.webkit.org/show_bug.cgi?id=223317 cd943145467f54e5928793c0dd3dfa2313c007dd ANGLE Metal index buffer restart range cache could be maintained.. https://bugs.webkit.org/show_bug.cgi?id=227451 f075ff77e592eabd54dd659a8e13617cc5faedc8 ANGLE Metal infinities and NaNs generated with incorrect syntax https://bugs.webkit.org/show_bug.cgi?id=229439 5862073269122f4b2d43d96d3922757557755e86 [Metal ANGLE] Fix over-autorelease of rx::DisplayMtl::getMetalDeviceMatchingAttribute()... <https://webkit.org/b/229128> 85f797ad31db048cb82cbafd428ef77f0b839312 ANGLE Cocoa compiles.... https://bugs.webkit.org/show_bug.cgi?id=228987 a67918ba279ad4842b6ae84a79c3f1c0cdc35ace Avoid infinite recursion... https://bugs.webkit.org/show_bug.cgi?id=228978 d341f67de0033adcf1ec6373ace6a54b06c4a031 Cherry-pick ANGLE: Revise WebGL's shaderSource validation https://bugs.webkit.org/show_bug.cgi?id=228951 1e2714d981e97de8234ba055570dfdf56e8b6944 3.5 MB system-wide footprint impact due to thread-locals... https://bugs.webkit.org/show_bug.cgi?id=228240 d32e5cca34081997d32504b0b56c18b9703ff3be Build Default Metal library offline https://bugs.webkit.org/show_bug.cgi?id=227333 33702279faccfd4c8d1c8a6d549925f9ca9a4e8f WebGL2 demo doesn't work due to failing compilation.... https://bugs.webkit.org/show_bug.cgi?id=226865 0a075885d242db38c4e435a6597173dc3b082173 rAF driven WebGL submits excessive amount of GPU work... https://bugs.webkit.org/show_bug.cgi?id=227059 f38a92b3e7c17efda269caa7066e7ffe2f828e72 WebGL shader link error in iOS 15 beta: "Internal error..." https://bugs.webkit.org/show_bug.cgi?id=227723 98d48f011d561531470d97f26a022767b5452fb7 REGRESSION (r279466): [Big Sur] webgl/1.0.3/conformance &... https://bugs.webkit.org/show_bug.cgi?id=227596 Bug: angleproject:6471 Change-Id: I07166d0dc4b5c3579d98353485b3245b81c7b882 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3194322 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
Kyle Piddington d3764f08 2021-09-30T13:46:15 Fix dEQP.GLES3/functional_fragment_out_array* on Direct to Metal Fragment arrays with locations assigned were not being correctly transformed. Fix ModifyStruct to handle the changing location when locations are set Bug: angleproject:6477 Change-Id: Icbacd50e265abdbaff3be230b2ec201eaa868a14 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3198807 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 32d6e806 2021-09-24T23:50:54 Vulkan: Fix rotation of interpolateAtOffset interpolateAtOffset's offset was multiplied by flipXY*rotationMatrix, which is a vector. This was unable to actually apply rotation to the offset. The multiplier is changed to a matrix. Can be tested by running interpolate_at_offset*default_framebuffer tests in deqp gles3.1 together with pre-rotation: ./angle_deqp_gles31_tests --deqp-case=dEQP.GLES31/functional_shaders_multisample_interpolation_interpolate_at_offset_no_qualifiers_default_framebuffer --emulated-pre-rotation=90 Bug: angleproject:5843 Change-Id: I9727371375e999f07463b69153df3fd8b28c2a71 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3183108 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Kenneth Russell da3db87e 2021-07-06T14:00:58 Upstream latest changes to Metal backend from Apple to 7/1/2021 This CL merges in the ANGLE changes between these two WebKit commits: https://git.webkit.org/?p=WebKit.git;a=commit;h=8648b353ab1d7730438c2e08319e1a4d64982c31 https://git.webkit.org/?p=WebKit.git;a=commit;h=166e4924a52971d6a32ad48247a439b16c00e062 Include provoking vertex buffer out of bounds fix from https://bugs.webkit.org/show_bug.cgi?id=230107 Fix bad merge of resetting of dirty bits, breaking DepthStencilFormatsTest.DepthTextureRender test and perhaps others. Disable GL_APPLE_clip_distance when the direct-to-Metal compiler is active. It can not yet handle the gl_ClipDistance array. Disable use of rectangular textures for IOSurfaces. Metal can bind IOSurfaces to 2D textures, and this was passing all tests in the SPIR-V Metal backend. Introducing rectangular textures breaks the SPIR-V Metal backend, and the tests currently fail on the direct-to-Metal backend. Fix several bugs with ProvokingVertex, which was causing both the SpirV and Direct backends to incorrectly draw indices. (https://bugs.webkit.org/show_bug.cgi?id=230107) Skip the following tests on the Metal backend which is still failing RobustResourceInitTestES3.BlitDepthStencilAfterClearBuffer GLSLTest_ES3.GLVertexIDIntegerTextureDrawArrays/ES3_Metal With these changes, angle_end2end_tests again runs to completion. Bug: angleproject:6395 Change-Id: I3cc58f531426a95fc8f177a4ad87f56c1855a546 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3167010 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
Shahbaz Youssefi 1a0a0764 2021-09-27T12:56:57 Translator: Fix outputting anonymous struct types Anonymous struct types have an "empty" symbol name, so instead of outputting their name, it's specified that they are anonymous. Bug: chromium:1253208 Change-Id: Ic70767ba32bda6ceb214dfc3d0b4928173665d81 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3187810 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi bc8fe7dd 2021-09-24T22:50:32 Translator: Fix removing inactive output vs SH_INIT_OUTPUT_VARIABLES The code that SH_INIT_OUTPUT_VARIABLES adds for inactive outputs is also removed with this change. Bug: chromium:1253016 Change-Id: I3caeb628487354de943f7b53f7462f58baa3eca8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3183107 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Gregg Tavares d71dc819 2021-09-22T16:01:06 Fixes for RowMajor test failures row_major matrices get translated to column major matrices and the expressions rewritten. To do this temporary variables that contain the column and row index expressions are moved to separte statements before the matrix expression itself. When this happens it breaks side effects and short circuits in the expression. The solution is to call SeparateCompoundExpressions before calling RewriteRowMajorMatrices. Bug: angleproject:6386 Change-Id: I4d819ade959e2a875495f62733e11d86560d3fab Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3177337 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares 6106da49 2021-09-22T16:18:21 Indent Generated GLSL Before: in vec4 _ua_position; void main(){ (gl_Position = vec4(0.0, 0.0, 0.0, 0.0)); (gl_Position = _ua_position); } layout(shared) uniform _uG{ float _ufoobar; } _ug; struct _uS { int _ufoo; float _ubar; }; layout(shared) uniform _uT{ _uS _us; float _um; } _ut; float _ufunc(in _uS _ustructVar){ return _ustructVar._ubar; } out vec4 _uoutColor; void main(){ float _uv = 0.0; for (int _ui = 0; (_ui < _ut._us._ufoo); (++_ui)) { int _uk = 0; while ((_uk < _ut._us._ufoo)) { (_uv += _ufunc(_ut._us)); if ((_uv > 100.0)) { break; } else { (_uv += 5.0); } switch (_uk) { case (0): (_uv += 3.0); break; case (1): (_uv += 1.0); break; default: (_uv -= 2.0); break; } } } (_uoutColor = (vec4(_uv) + vec4(_ug._ufoobar))); } After: in vec4 _ua_position; void main(){ (gl_Position = vec4(0.0, 0.0, 0.0, 0.0)); (gl_Position = _ua_position); } layout(shared) uniform _uG{ float _ufoobar; } _ug; struct _uS { int _ufoo; float _ubar; }; layout(shared) uniform _uT{ _uS _us; float _um; } _ut; float _ufunc(in _uS _ustructVar){ return _ustructVar._ubar; } out vec4 _uoutColor; void main(){ float _uv = 0.0; for (int _ui = 0; (_ui < _ut._us._ufoo); (++_ui)) { int _uk = 0; while ((_uk < _ut._us._ufoo)) { (_uv += _ufunc(_ut._us)); if ((_uv > 100.0)) { break; } else { (_uv += 5.0); } switch (_uk) { case (0): (_uv += 3.0); break; case (1): (_uv += 1.0); break; default: (_uv -= 2.0); break; } } } (_uoutColor = (vec4(_uv) + vec4(_ug._ufoobar))); } Bug: angleproject:6428 Change-Id: Ica25151e68eb0defd85a3b6241db442d8eb84743 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3177339 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Shahbaz Youssefi e1a9af6a 2021-09-20T10:42:03 Translator: Fix HLSL vs for loop's init not having initializer The handleExcessiveLoop code expected that if a for loop has an init expression that it must necessarily have an initializer as well. That is not true in (fuzzer-produced) code such as following: for (int i; ...; ...) Bug: chromium:1238182 Change-Id: Id761e937a34a6b2feac1266e22207350a3bd616c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3170114 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Kyle Piddington f6616c71 2021-09-14T17:42:22 Reimplement transform feedback on direct-to-Metal backend Connect the Transform Feedback code generation from Webkit ANGLE to the shader specialization code. Bug: angleproject:6393 Change-Id: I090c44c6ee97e8e0af8c38433bfb74c2080784f9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3161455 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Gregg Tavares <gman@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Shahbaz Youssefi 46149c0e 2021-09-17T15:38:47 Translator: Fix pruning functions that declare a struct When pruning unused functions, the entire declaration of the function is removed. If the function declares a struct as part of its return value, the declaration of that struct was lost. This change makes sure that declaration survives the pruning. For example: struct S { vec4 v; } unused_func() { ... } is now replaced with: struct S { vec4 v; }; This change also makes struct usage validation more stringent. Bug: chromium:1248753 Change-Id: Idd9a87fd2e785135775cfea62995fd33adaf3c09 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3169691 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexis Hetu 158ef351 2021-09-15T13:40:28 Fix integer overflow in BlockLayoutEncoder BlockLayoutEncoder::mCurrentOffset's computation had the possibility of causing integer overflows in multiple places, so this CL adds CheckedNumeric variables in a number of these occurrences in order to prevent integer overflows and causing issues. The issue in this case was an integer overflow causing the code in ValidateTypeSizeLimitations.cpp to use an invalid result from "layoutEncoder.getCurrentOffset()", which ended up compiling a shader which would later cause an OOM error. Bug: chromium:1248665 Change-Id: I688d669f21c6dc2957e43bdf91f8f8f08180a6f7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3163356 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexis Hétu <sugoi@chromium.org>
Shahbaz Youssefi 9112b1a9 2021-09-13T15:39:53 Vulkan: SPIR-V Gen: Fix precision of findMsb In GLSL, findMsb operates on a highp operand, while returning a lowp result. In SPIR-V, RelaxedPrecision cannot be applied on the FindSMsb instruction as that affects the operand as well. This change makes sure RelaxedPrecision is not applied to a FindSMsb instruction. Bug: angleproject:4889 Bug: angleproject:6132 Change-Id: I6a0defbbd53ec703c7ecbad5cd5c79d215b11c32 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3158506 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Gregg Tavares 9c6f6c39 2021-09-10T14:46:18 nullptr_t to std::nullptr_t The Skia build requires std::nullptr_t Bug: angleproject:6377 Change-Id: Ic41955e1dfefcf24bc39240d164ad938f523717c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3154997 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares 2795866c 2021-09-10T02:08:40 Fix ConvertUnsupportedConstructorsToFunctionCalls The code was not hanlding nested expressions. For example: mat4(vec4(mat2x2), ...) Switched to using TIntermRebuild Bug: angleproject:5505 Change-Id: I845d94326324ac48d7489225d42d0c6e38622492 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3152168 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Gregg Tavares 958dce52 2021-09-09T14:36:37 Move IntermRebuild.h/cpp to tree_util Bug: angleproject:5505 Change-Id: I7b68057fff0a0eb0d86c1aed01599fa9dbb7db3b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3152167 Commit-Queue: Gregg Tavares <gman@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 13e9817b 2021-09-08T11:57:00 Translator: Fix assert in ScalarizeVecAndMatConstructorArgs This transformation assumed that precision can be derived for constants in every possible scenario, but that's not true. The fuzzer produced the following code: void main() { mat4 m; mat2(0, bvec3(m)); } In the above, the constant 0 legimitately has no precision. The assert was in a function that attempted to make a temporary out of the constant, which this commit changes to use the original constant as-is. Bug: chromium:1246781 Change-Id: I6f247264e5213cfd9449fdfb1dc312d02b99f2f1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3149191 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Gregg Tavares fa9f4cf3 2021-09-08T12:58:59 Fix AST validation error with gl_FragCoord Bug: angleproject:6370 Change-Id: Ia575e0329da74c84365b74b39398551b572b91a5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3149725 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>