src


Log

Author Commit Date CI Message
Igor Nazarov b22124bd 2023-01-17T17:44:06 Implement new "Global Mutex" functionality. This CL improves performance compared to the existing code as well as allows using non-std mutex implementations. Also acts as a base for future changes. CL adds new build option: angle_enable_global_mutex_recursion = is_android && angle_enable_vulkan "mutex_recursion" work same way as `std::recursive_mutex` before. It will help in situations when Vulkan API may return back to the ANGLE. For example: RenderDoc layer EGL deadlock. Automatic loading of "libVkLayer_GLES_RenderDoc.so" layer causes deadlock in EGL. Recursion stack: #01 pc 000000000029ea80 /vendor/lib64/egl/libGLESv2_angle.so (egl::GlobalMutexHelper::lock(int)+596) #02 pc 000000000029c59c /vendor/lib64/egl/libGLESv2_angle.so (EGL_GetError+32) #04 pc 0000000000062368 /system/lib64/libEGL.so (eglQueryString+20) #05 pc 0000000000508fec /data/local/debug/vulkan/libVkLayer_GLES_RenderDoc.so #20 pc 0000000000016690 /system/lib64/libvulkan.so (vulkan::api::EnumerateInstanceLayerProperties(unsigned int*, VkLayerProperties*)+40) #21 pc 00000000005aa030 /vendor/lib64/egl/libGLESv2_angle.so (rx::RendererVk::initialize(rx::DisplayVk*, egl::Display*, char const*, char const*)+292) #26 pc 000000000029c7e8 /vendor/lib64/egl/libGLESv2_angle.so (EGL_Initialize+192) Additionally, recursive mutex will partially solve Android SurfaceTexture deadlock (angleproject:4354). Some performance numbers for 1000'000 `eglGetError()` calls. Mutex Time (ms.) Android S906B egl::GetGlobalMutex()(std::recursive_mutex) 41.4 (Default) GlobalMutex (std::recursive_mutex) 39.1 (Recursive) GlobalMutex (std::mutex) 34.9 (Debug) GlobalMutex (std::mutex) 34.7 (Default) GlobalMutex (std::mutex) 34.4 Windows egl::GetGlobalMutex()(std::recursive_mutex) 20.5 (Default) GlobalMutex (std::recursive_mutex) 20.0 (Recursive) GlobalMutex (std::mutex) 21.9 (Debug) GlobalMutex (std::mutex) 20.5 (Default) GlobalMutex (std::mutex) 19.9 Note: Recursive GlobalMutex enabled only for Android Vulkan by default. Original fix: https://chromium-review.googlesource.com/c/angle/angle/+/2029218 Bug: angleproject:8101 Bug: angleproject:4354 Test: angle_unittests --gtest_filter=GlobalMutexTest.* Change-Id: I9e9d9b5c598ad1177ffa147ea690bd955946a712 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4401940 Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 22b51592 2023-04-04T20:52:25 Implement fast GetCurrentThreadId() function. This function is 7-8x faster than GetCurrentThreadUniqueId() on Android. This CL is required for future CLs related with Global and Context mutexes. Test: angle_unittests --gtest_filter=SystemUtils.GetCurrentThreadId Bug: angleproject:8101 Change-Id: I4023b83510708ce242f4863b5cb12c6eef15e0a1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4401939 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov e2baaff8 2023-04-06T00:11:23 Prevent recursive GlobalMutex locking by ANGLE itself. Instead of adding `ANGLE_SCOPED_GLOBAL_LOCK()` for `glEGLImage*` GLES APIs, this CL uses new `SCOPED_GLOBAL_AND_SHARE_CONTEXT_LOCK()` macro in place of `SCOPED_SHARE_CONTEXT_LOCK()`. This will remove dependency on recursive mutex for ANGLE itself. Recursive mutex is still required for Android Vulkan or in specific cases when using layer libraries. Bug: chromium:1383195 Change-Id: I0c379c45c046b0f5e5dd3ea64a45d33b0ad3ee43 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4404777 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Colin Blundell d6d7e551 2023-04-24T14:42:06 [ContextEGL] Check for default FBO being null in onUnmakeCurrent https://chromium-review.googlesource.com/c/angle/angle/+/4451908 added restoring of the default FBO ID when making external contexts un-current. However, it turns out that onUnmakeCurrent() will be called during destruction even if it was previously called without an intervening makeCurrent() call [1], with the first call having un-set the default FBO [2]. Hence, we need to check for whether the default FBO exists in this flow to avoid crashes [3]. [1] https://source.chromium.org/chromium/chromium/src/+/main:third_party/angle/src/libANGLE/Context.cpp;l=766-787?q=Context.cpp&ss=chromium [2] https://source.chromium.org/chromium/chromium/src/+/refs/heads/main:third_party/angle/src/libANGLE/Context.cpp;l=931;drc=a61b95c63b0b75c1cfe872d9c8cdf927c226046e;bpv=1;bpt=1 [3] https://crash.corp.google.com/browse?q=product_name%3D%22AndroidWebView%22+AND+EXISTS+%28SELECT+1+FROM+UNNEST%28expanded_custom_data.ChromeCrashProto.experiments.ids%29+expanded_custom_data_ChromeCrashProto_experiments_ids+WHERE+expanded_custom_data_ChromeCrashProto_experiments_ids%3D%2741e765a5-991da97%27%29+AND+product.Version%3D%27114.0.5730.0%27+AND+expanded_custom_data.ChromeCrashProto.magic_signature_1.name%3D%27rx%3A%3AContextEGL%3A%3AonUnMakeCurrent%27+AND+EXISTS+%28SELECT+1+FROM+UNNEST%28CrashedStackTrace.StackFrame%29+WHERE+FunctionName%3D%27rx%3A%3AContextEGL%3A%3AonUnMakeCurrent%28gl%3A%3AContext+const*%29%27%29+AND+EXISTS+%28SELECT+1+FROM+UNNEST%28CrashedStackTrace.StackFrame%29+WHERE+FunctionName%3D%27rx%3A%3AContextEGL%3A%3AonUnMakeCurrent%28gl%3A%3AContext+const*%29%27%29&stbtiq=&reportid=&index=0 Bug: chromium:1434315, chromium:1436354 Change-Id: I676dad65dc249e87ee0cae169ba93f605f776341 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4467147 Auto-Submit: Colin Blundell <blundell@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Amirali Abdolrashidi b58ef53a 2023-04-14T14:27:12 Vulkan: Add size limit for VMA image suballocation * Added kImageSizeThresholdForDedicatedMemoryAllocation, currently set to 4MB. Any image larger than this will have its own dedicated device memory handle via the following flag: * VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT Bug: b/218891184 Change-Id: I00318188bf929cf6949d441e5048e9e9640fe5ca Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4428536 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Colin Blundell 3ec55617 2023-04-20T08:36:24 [StateManagerGL] Add asserts to each mFunctions->get*() call Will enable pinpointing where the assert that is going off in crbug.com/1434317 is coming from. Can revert if desired once we have needed info. Note: All of these gets are called only from syncFromNativeContext() or functions that are called by that function, so adding these asserts shouldn't result in any new crashes beyond those that would already be generated via the assert at the end of syncFromNativeContext(). Bug: chromium:1434317 Change-Id: I3dfa12f631bfbbb567d6043cc467d0ddfa8911e5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4451907 Auto-Submit: Colin Blundell <blundell@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Colin Blundell cf91a5e6 2023-04-20T09:07:41 [ContextEGL] Restore default FBO ID in onUnmakeCurrent() When making an external context current, ContextEGL sets the default FBO ID to that bound by the external context. However, we don't currently restore it to its previous value (expected to be 0) in onUnmakeCurrent(). Aside from being generally problematic, this specifically causes an assert to go off when later destroying this framebuffer (see the linked bug). This CL adds this restoration. This should be sufficient to resolve the linked bug, as we don't expect ANGLE to process destruction of an external context while it is current due to the GL spec [1]. [1] https://bugs.chromium.org/p/chromium/issues/detail?id=1434315#c6 Bug: chromium:1434315 Change-Id: I6da1880aea4c5245f1506ccc22f92370babd1917 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4451908 Commit-Queue: Geoff Lang <geofflang@chromium.org> Auto-Submit: Colin Blundell <blundell@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Amirali Abdolrashidi 613adfe5 2023-04-20T14:58:10 Enable CRC for pipeline cache * Enabled CRC for the pipeline cache to see if the flakiness occurs again. Bug: b/246683126 Change-Id: Ia0de3f151823fb47be769bd1cf6a7e7ef9a8b578 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4455551 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov db33a246 2023-04-21T13:17:07 Remove obsolete VUID suppression Renamed in https://github.com/KhronosGroup/Vulkan-ValidationLayers/pull/5645 Bug: angleproject:8119 Change-Id: I578ee8cf538112f974ac0a3a7b80d37947993f5b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4459181 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Roman Lavrov 2ce6d8df 2023-04-20T17:16:00 TextureVk calls onStateChange when releasing buffer views TextureVk::setBuffer releases buffer views and they don't get initialized unless a dirty bit is set. That works on the first draw call because Texture::Texture() sets DIRTY_BIT_IMPLEMENTATION in constructor, but when called twice mBufferViews remains unitialized causing mBufferViews.getView() misbehavior. Fix this by calling onStateChange when buffer views are released. As mBufferViews is only initialized conditionally for texture buffers, add a bool for tracking whether it is in the initialized state to avoid marking texture as dirty unnecessarily. Note that this isn't handled by signalDirtyStorage() inside Texture::setBufferRange because (in this test case?) there are no observers on Texture so onStateChange called from Texture is a no-op. Texture however observes its TextureVk implementation so onStateChange calls from TextureVk end up setting the dirty bit in Texture::onSubjectStateChange. Bug: b/278585075 Change-Id: I2b83160cdd89a086ed81e8412cd64d0aad930911 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4457147 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
Charlie Lao 8049d082 2023-04-20T16:13:34 Vulkan: Split ShareGroupVk class from DisplayVK into its own files When ShareGroupVk class was introduced, it is a bit of convenience to put it in the DisplayVk.h and DisplayVk.cpp files. Now we have added more and more code into ShareGroupVk class and it deserves to have its own files. This CL added two files ShareGroupVk.h and ShareGroupVk.cpp and moved the class into the new files. No functional change is expected. Bug: None Change-Id: I8683a3dc4192612d6ec8abbc7f00424958f09598 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4454639 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 285baade 2023-04-20T14:47:30 Move CRC check to before cache decompression * Moved the CRC check to before the decompression is performed. * Removed the asserts related to CRC, since if it is enabled, an app is run, and then it is disabled, running the same app can trigger the assert. * Changed the FATAL() CRC logs to WARN() for now. Bug: b/246683126 Change-Id: Ie4c33079b06766904649346d498234c6fc1a3415 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4455550 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Yuly Novikov 60dd588e 2023-04-21T12:05:42 Revert "Temporarily restore obsolete VUID suppressions" This reverts commit d0148f12bc1226a045b1b28e1a4be89e5012ef12. Reason for revert: VVL rolled into Chromium crrev.com/c/4454789 Original change's description: > Temporarily restore obsolete VUID suppressions > > To roll ANGLE into Chromium, which still has old VVL. > > Bug: angleproject:8119 > Change-Id: Ic0b53f8a965de5f11b5a143be2a9a05f57304547 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4428872 > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Auto-Submit: Yuly Novikov <ynovikov@chromium.org> Bug: angleproject:8119 Change-Id: If0befdae7b69b8a4dba998f06cd022ee69d8734b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4454401 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi 77d86c4a 2023-04-20T11:21:59 Vulkan: Set shading rate dynamic state unconditionally Since this state is dynamic, it must be set before use. Bug: angleproject:8108 Change-Id: I3ceeae95cdfad3388c35dd9e629e1424617f48b0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4455148 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
angle-autoroll 03f0e51d 2023-04-14T19:51:54 Roll VK-GL-CTS from a3d054bf72ab to b1e5b9348e77 (21 revisions) Define DE_FENV_ACCESS_ON based on https://github.com/KhronosGroup/VK-GL-CTS/commit/9f306457b48b3f8258ca44462003ef39b80a7515 https://chromium.googlesource.com/external/github.com/KhronosGroup/VK-GL-CTS.git/+log/a3d054bf72ab..b1e5b9348e77 2023-04-14 gleese@broadcom.com Assert that the number of output buffers is correct 2023-04-14 piotr.byszewski@mobica.com Merge vk-gl-cts/vulkansc-cts-1.0.1 into vk-gl-cts/main 2023-04-14 piotr.byszewski@mobica.com Merge vk-gl-cts/opengl-cts-4.6.3 into vk-gl-cts/main 2023-04-14 piotr.byszewski@mobica.com Merge vk-gl-cts/opengl-es-cts-3.2.9 into vk-gl-cts/main 2023-04-14 piotr.byszewski@mobica.com Test multiviewport with fragment density map 2023-04-14 rgarcia@igalia.com Test EDS3 feature interactions 2023-04-14 rgarcia@igalia.com Fix build with GCC 13 2023-04-14 gleese@broadcom.com Modify the max_vertex tests to have room for all attributes 2023-04-14 gleese@broadcom.com Share shader code in vertex_input tests 2023-04-14 marcin.zajac@mobica.com Add tests for manual derivatives with subgroups 2023-04-14 gleese@broadcom.com Fix some indentation in descriptor indexing tests 2023-04-14 gleese@broadcom.com Change descriptor_indexing tests to use stdint types 2023-04-14 gleese@broadcom.com Trivial simplification to descriptor_indexing tests 2023-04-14 gaopan24@hisilicon.com Fix upper Lod bound in image lod query tests 2023-04-14 cturner@igalia.com Revert "Fix VUID-vkCmdDecodeVideoKHR-pDecodeInfo-07267 validation error." 2023-04-14 cturner@igalia.com Try to inform the compiler when dynamically changing the rounding mode. 2023-04-14 marcin.zajac@mobica.com Vulkan video 1.3.244 patch 2023-04-14 ziga@lunarg.com Initialize VkSparseImageMemoryRequirements2 struct in memory tests 2023-04-14 rgarcia@igalia.com Add dynamic color blend variants without dynamic logic op 2023-04-14 rgarcia@igalia.com Test vkCmdDrawIndirect*Count* with multiview 2023-04-14 piotr.byszewski@mobica.com Merge vk-gl-cts/vulkan-cts-1.3.5 into vk-gl-cts/main If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/vk-gl-cts-angle-autoroll Please CC angle-team@google.com,ynovikov@google.com on the revert to ensure that a human is aware of the problem. To file a bug in ANGLE: https://bugs.chromium.org/p/angleproject/issues/entry To report a problem with the AutoRoller itself, please file a bug: https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: None Change-Id: I4e0756379eb4fcf408bc9d142ef9a14eb300897e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4427126 Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Roman Lavrov 362c7023 2023-04-20T12:12:10 When asserts enabled, log validation errors as WARN These messages are useful for debugging but INFO() doesn't get logged at all (e.g. when using flags from linux-test CI) Bug: None Change-Id: I7fc02e866fc304c1e925becff58b71345d34238b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4456067 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
Scott Violet 37ea6317 2023-04-19T13:40:56 Adds version switch to metal compiler This way we generate a version that works on all OS versions we support. Bug: chromium:1423136 Change-Id: I5d22bdac420d9d2d31bb65883e4470c1785d5abc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4451026 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Scott Violet <sky@chromium.org>
Stephan Hartmann b95c2867 2023-04-20T07:25:24 IWYU: add stdint.h in angle::base::SecureHashAlgorithm Bug: chromium:957519 Change-Id: Ic8980242ade4d804887da84e514c14b4e6729e38 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4450309 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov 23ff85fe 2023-04-20T13:32:37 Suppress newly added PixelLocalStorageTest.TextureLevelsAndLayers on iOS Metal Bug: angleproject:7994 Change-Id: I9d3a1e2af99e3127d74b96c0740054e47fd4b661 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4455107 Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Dan Glastonbury 4c6be8d4 2023-04-20T13:13:50 [Metal] Initialize all mtl::TranslatedShaderInfo members hasInvariantOrAtan was never initialized. Fixed: angleproject:8136 Change-Id: I770a6fa60da79fd301e3ab04f0f33605446a27f9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4452766 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Chris Dalton ef20f191 2023-03-29T14:05:04 Make the PLS allow list more permissive Allow ClipControlEXT, FlushMappedBufferRange, Gen*, PolygonOffset*, ProvokingVertexANGLE, and KHR_debug commands. Allow caps DEPTH_CLAMP_EXT, CLIP_DISTANCE[0..7]_EXT. Ban indexed caps besides BLEND, SCISSOR_TEST, SCISSOR_TEST_EXCLUSIVE_NV. Clarify that the index restrictions on indexed caps only apply to BLEND. Bug: chromium:1421437 Change-Id: Ibdb0acaebfa992ad37c928481d5ecb10496f22e5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4382502 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app>
angle-autoroll 7d813e4e 2023-04-19T12:34:56 Roll vulkan-deps from c8e5e8c4c60b to 9403c35f9956 (31 revisions) https://chromium.googlesource.com/vulkan-deps.git/+log/c8e5e8c4c60b..9403c35f9956 Suppress new VUIDs: "VUID-vkCmdDraw-None-02859", "VUID-vkCmdDrawIndexed-None-02859", "VUID-vkCmdDrawIndexed-None-07835", "VUID-vkCmdDrawIndexedIndirect-None-02859", "VUID-vkCmdDrawIndirect-None-02859", "VUID-VkGraphicsPipelineCreateInfo-Input-08733", Changed dependencies: * spirv-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git/+log/f449fb4ad9..25ad5e19f1 * vulkan-loader: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader.git/+log/8c8619df2d..f035e57c17 * vulkan-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools.git/+log/4e17c284d6..db7475424c * vulkan-validation-layers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/7b50c36e7a..50c2f9e71a If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/vulkan-deps-angle-autoroll Please CC angle-team@google.com,jonahr@google.com on the revert to ensure that a human is aware of the problem. To file a bug in ANGLE: https://bugs.chromium.org/p/angleproject/issues/entry To report a problem with the AutoRoller itself, please file a bug: https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: angleproject:8119 Change-Id: I8cb9bd3b593f24af130d9239c35fb119ed6bb41b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4446977 Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Yuly Novikov 31a501ec 2023-04-19T16:37:37 Fix iOS build Define PosixSpawnFileActions::Chdir() only on MacOS, similarly to crrev.com/c/4300129. Bug: chromium:1423136 Change-Id: I51055fb07166ecd6f8140afba421a3740fb5eafb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4448607 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Scott Violet <sky@chromium.org>
Charlie Lao fa9172a3 2023-03-27T09:49:33 Reland "Vulkan: Use midRenderPass clear if RP has started but inactive" This is a reland of commit 98151770adfd990c533991da27615b4879494307 Original change's description: > Vulkan: Use midRenderPass clear if RP has started but inactive > > This CL extends prior CL's optimization so that if clear is issued right > after blitFramebuffer call (this could make sense if blit and clear are > on different buffer), we can keep the started render pass and do the > midRenderPass clear instead of endRenderPass and start another > renderPass. > > Bug: b/273808966 > Change-Id: Ia2504e8e260867a6f797d42cd4c8a72f187280ef > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4374145 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/273808966 Change-Id: I5c8c85c173f021a7753ef579f83d9ceb24147a7c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4442911 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Kimmo Kinnunen 20b6624a 2023-04-17T13:55:09 Metal: Support compiling on iOS without EAGL Makes EAGL and CGL compilation exclusive to each other. Catalyst would compile with both on ARM64, but only use EAGL. Remove use of GLSL generation in MSL. Generating GLSL for MSL compute and geometry shaders do not make sense. Remove compilation of RewriteRowMajorMatrices for Metal. It was removed from Metal in: b23bf47c9e999532a684beab9ac901552420b0b8 Reland "Metal: rewrite default uniforms and uniform blocks" Remove use of ANGLE_ENABLE_APPLE_WORKAROUNDS and gn variable angle_enable_apple_translator_workarounds. The workarounds are just unconditional business-as-usual implementation of ANGLE when ANGLE is compile for PLATFORM_APPLE. Fixed: angleproject:8129 Change-Id: I3af249708803fba816e2a7c92c35dddb84ce6946 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4428875 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Dan Glastonbury <djg@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Yuxin Hu 6deca89e 2023-03-22T22:33:40 Add Spirv Instruction to explicitly cast mediump float to 16 bit If the GLSL shader code expects the comparison between two mediump float values returning true, but the SpirV compiler treats one of them as 32-bit, and treats the other one as 16-bit, the comparison would return false instead. The SpirV compiler may not automatically cast the mediump float values to 16 bits, because it may utilize the RelaxedPrecision decoration to keep a mediump float as 32-bit, so that the compiler can avoid the type cast from 32-bit highp to 16-bit mediump. This change adds an additional OpQuantizeToF16 SpirV instruction to explicitly cast mediump float scalar or mediump float vector to 16 bit, if they are assigned with a highp float value. This ensures that if the GLSL shader code ever compares two meiump float values, the SpirV shader compiler is not accidentally comparing a 16 bit with a 32 bit float value. This fixe the deqp test failure on Pixel 6 and Pixel 7: dEQP-GLES2.functional.shaders.algorithm.rgb_to_hsl_vertex. Bug: b/274859104 Bug: b/274408172 Change-Id: Ifd996cea14c0f77f45ae90f38c8e53cf5035139f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4400404 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Charlie Lao 9188aa0e 2023-04-18T10:05:29 Vulkan: Disallow reactivate of UtilsVk::blitResolve renderPass We are still seeing ClearTestES3.RepeatedStencilClearWithBlitInBetween/ES3_Vulkan flakiness on win-test bot with intel GPU. The exact root cause is still unknown. For now this CL will disallow reactivate of UtilsVk::blitResolve renderPass by the subsequent user's draw calls. Bug: b/273808966 Change-Id: Iebf37da3642d1fc3ee724b0743bfc0767ac48354 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4442446 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 3b57e999 2023-04-17T15:38:47 Scope global lock in entry points This change is a no-op. It's in preparation for adding calls at the end of the entry point after the lock is unlocked. Bug: angleproject:8127 Change-Id: I4cd79ff8e5f20f87f36040afbd1ed9f16406d519 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4436589 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Scott Violet 65f4d2a4 2023-04-17T10:08:18 Adds features to enable loading/saving metallibs to blobcache CompileMetalShaders results in the appropriate command line tool being run to generate metallib blobs from shader source. DisableProgramCaching results in not saving programs to BlobCache LoadMetalShadersFromBlobCache results in trying to load metallibs from BlobCache. Bug: chromium:1423136 Change-Id: I01a4d7a5d60ed5ac978fb99db01b741e0f19e76b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4434293 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Scott Violet <sky@chromium.org>
Alexey Knyazev 443ac5b4 2023-04-17T00:00:00 GL: Enable OES_shader_multisample_interpolation Drive-by: * Fixed validity of the related state queries * Added SampleMultisampleInterpolationTest * Removed unused OES_sample_variables code Bug: angleproject:8097 Bug: angleproject:8131 Change-Id: I816d2096759a96d8691acd0a8c5ecdedf880201b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4440826 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Maksim Sisov fdbd6488 2023-04-12T14:02:44 metal: allow unequal size attachments. OpenGLES3.0 allows FBO with attachments that have unequal size. In Metal, an FBO is represented by a render pass pipeline, which is created using MTLRenderPassDescriptor descriptor. The render pass can have color attachments as well as depth and stencil attachments. Those individual attachments must have a texture attached, which works as a buffer. However, the documentation does not specify any dimension restrictions for those textures. Test: verify the FramebufferTest_ES3.AttachmentsWithUnequalDimensions passes. Test2: made a simple metal app that renders using an offscreen render pass pipeline to a texture that has size of 32x16 with a depth buffer attached (size of 16x32) and verified the pixels on that. The content outside the common area had undefined pixel data. Bug: angleproject:7994, angleproject:6447 Change-Id: I257f8e3aad497772cfc7de08314818ee5f434b84 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4418266 Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Brian Ho 4c8ab49d 2023-04-13T18:00:31 Use MESA variant of glFramebufferParameteri if possible The GL_MESA_framebuffer_flip_y extension lets the client flip reads and writes to the a fb via glFramebufferParameteri. glFramebufferParameteri, however, is only available on GLES 3.1+, but the flip y extension spec states that GLES 3.0 implementations can still implement this extension by providing glFramebufferParameteriMESA (see "Revision History" [1]). Some old ChromeOS Flex devices only support GLES 3.0, but still expose this extension. Currently, ANGLE segfaults when trying to update the FLIP_Y param [2] (e.g. when we create a WebGL canvas) on these devices because framebufferParameteri is only initialized on GLES 3.1+ [3]. This CL fixes the crash by falling back to the MESA variant of framebufferParameteri when framebufferParameteri is unavailable. [1]:https://registry.khronos.org/OpenGL/extensions/MESA/MESA_framebuffer_flip_y.txt [2]:https://source.chromium.org/chromium/chromium/src/+/main:third_party/angle/src/libANGLE/renderer/gl/FramebufferGL.cpp;l=1330;drc=bf5e9dbc89e2dddb9c36200396139e938467f58e [3]:https://source.chromium.org/chromium/chromium/src/+/refs/heads/main:third_party/angle/src/libANGLE/renderer/gl/DispatchTableGL_autogen.cpp;l=2552;drc=837cc12de25a288edf3ac222f7265c9936e69552 Bug: b/264681962 Change-Id: I079937bcd54b580b79d875f57c2b80ae796f2d83 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4425929 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Brian Ho <hob@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Scott Violet 4e6cea96 2023-04-17T15:56:40 Removes UNREACHABLE in display initialization As it's possible for metal to be unavailable, UNREACHABLE() should not be used. Chrome has started shipping some builds with asserts enabled, so that it's possible for the gpu to crash here. Removing the UNREACHABLE makes it so the code doesn't crash and gpu fallback happens. Bug: chromium:1354718 Change-Id: I613c44b428c1de73b4b9937505e151d9416388ef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4437615 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Scott Violet <sky@chromium.org>
Kramer Ge 7b33f4b9 2023-04-17T22:03:10 GL: Extend Qualcomm driver workarounds beyond Android ChromeOS boards using Qualcomm 7c Gen1, 7c Gen2 and 7c+ Gen3 are subject to these workarounds as well. Bug: angleproject:8094 Change-Id: Id9f9155e203fe2d3563dcfb1798cd9f289565d01 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4438291 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Kramer Ge <fangzhoug@chromium.org>
Chris Dalton 1e166daf 2023-04-10T23:49:46 Finalize PLS support for non-2D texture types Commit to supporting GL_TEXTURE_2D_ARRAY and GL_TEXTURE_3D, and add tests. Suppress D3D11 and Metal for now, since shader image support for non-2D types needs some work on those backends. Drop support for cube maps, since those will cause complications on an implementation based on texelFetch. Bug: chromium:1421437 Bug: angleproject:8124 Bug: angleproject:8125 Change-Id: I403ae157b7d2609f2190a98c2576c92f73441412 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4415150 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app>
Charlie Lao 2f19bb74 2023-03-16T16:03:29 Reland "Vulkan: Reactivate already started render pass when possible" This is a reland of commit ad9537af7f2bb5e22bc73f4e833fd3789adaa217 Original change's description: > Vulkan: Reactivate already started render pass when possible > > In some usage case (such as lineage_mobile), we are seeing in the middle > of render pass, app switch to another fbo just to issue a glClear() > call, which the clear call itself gets deferred. Application then switch > back to the original frame buffer. Before this CL, the render pass gets > recreated due to frame buffer binding change, even though the clear gets > deferred and new render pass and the previous render pass are > essentially the same. This CL detects this situation and reactivate the > current render pass instead of creating a new one. With this CL, > lineage_m app trace reduces frame time from 3.86ms to 3.7ms, and only > one render pass is used instead of two. > > This CL also allows the render pass started by BlitFramebuffer reused by > subsequent draw calls. Asphalt_9 is hitting this use pattern and this CL > reduces frame time by 0.1245 ms (from 5.6203 ms to 5.4958 on pixel 7 > pro) > > Bug: b/273808966 > Change-Id: I48c2671cbef3ff9d6cf59caae88c37c77828ee07 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4348713 > Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/273808966 Change-Id: Ice9062122ae320b1a0108ff981bc65bd13b2ada0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4406888 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Geoff Lang be9fcaa9 2023-04-17T11:28:53 Avoid calling GetGpuIDFromDisplayID in Mac GPU info collection. To detect the currently active GPU, CGLQueryRendererInfo is used. Calling any CGL function loads the system's OpenGL driver even when we don't intend on using OpenGL for rendering. Confirmed that the OpenGL framework is not loaded when Chrome is run with Metal on a single-GPU system. Bug: chromium:1433697 Change-Id: I824e7663948169123ad8c87d6b3867616233c329 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4428302 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Amirali Abdolrashidi a7bd3f53 2023-03-31T16:57:35 Fix the retrace issue for VMA image suballocation After adding the VMA image suballocation feature, VVL errors were seen when using the retracing script for some traces, causing failure. After analysis, it was seen that the functionality of the allocation differs from the original method when it comes to non-zero memory allocation. * In allocateAndBindMemory(), the memory property flags from the allocated memory are returned to be used for non-zero memory feature usage. * Added mapMemoryAndInitWithNonZeroValue() to ImageMemorySuballocator, which is used when allocateNonZeroMemory is enabled and the allocated memory is host-visible. * Merged the following into ImageHelper::initializeNonZeroMemory(): * mapMemoryAndInitWithNonZeroValue() * InitMappableDeviceMemory(); used when VMA image suballocation is disabled. * Moved onMemoryAlloc() inside allocateAndBindMemory(). Test: retrace_restricted_traces.py Bug: b/277618656 Bug: angleproject:8058 Change-Id: If411a073e900c1c034d40a99e3fffefe30c82548 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4391403 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Rafael Cintron c9c40896 2023-04-10T11:53:01 Eliminate TexStorage Label Redundancy Having the word "Texture" in the label of the TexStorage family of classes is redundant since that information is already conveyed in the "Tex" part of the class name. Keep the "Swizzle" and "Level0" strings to disambiguate from the main allocation. Bug: chromium:1164111 Change-Id: I776b181c4e25ce189a3166bf49471fbf1f04d397 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4410414 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
Yuly Novikov d0148f12 2023-04-15T11:44:06 Temporarily restore obsolete VUID suppressions To roll ANGLE into Chromium, which still has old VVL. Bug: angleproject:8119 Change-Id: Ic0b53f8a965de5f11b5a143be2a9a05f57304547 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4428872 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Alexey Knyazev 7bc4b7e3 2023-03-27T00:00:00 Metal: Implement OES_sample_variables New ESSL built-ins are mapped to their Metal counterparts and tweaked to follow OpenGL ES semantics when needed. Fixed A2C interaction with sample coverage by emulating the former on non-Apple GPUs. Bug: angleproject:8097 Fixed: angleproject:5087 Change-Id: I5d28a941af5cbc14743a3930731529f11f55febd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4404896 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Roman Lavrov 4e073356 2023-04-13T15:16:53 Trace Interpreter: gzip cpp and run gold tests. New test step: angle_restricted_trace_gold_interpreted_tests similar to existing angle_restricted_trace_gold_tests but runs a subset of newest traces that have the right format. Currently there are 8 of them and the filter is hard-coded in test_suites.pyl. rise_of_empires can also be run interpreted but happened to flake during testing so it's not included for now. Trace cpp files are concatenated and gzipped as a build step producing gen/tracegz_{trace}.gz and these gz files are then distributed as part of the build --trace-interpreter flag changes from boolean to string to support: --trace-interpreter=gz: * this uses the gz file above * gold tests added in this CL use this option --trace-interpreter=c: * using uncompressed c/cpp file * existing angle_trace_interpreter_tests runs a retrace saving .c files and uses this option Bug: b/276742336 Change-Id: I69544f25bda873af191978195d02ffbdd34363c0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4424690 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Roman Lavrov <romanl@google.com>
angle-autoroll 82f1cee0 2023-04-13T15:28:17 Manual roll vulkan-deps from ec231c69caa6 to c8e5e8c4c60b (60 revisions) Suppress new VUIDs: VUID-VkGraphicsPipelineCreateInfo-Input-07905 UNASSIGNED-CoreValidation-Shader-InterfaceTypeMismatch Unsuppress obsolete VUIDs: UNASSIGNED-CoreValidation-Shader-InputNotProduced UNASSIGNED-CoreValidation-Shader-InterfaceTypeMismatch https://chromium.googlesource.com/vulkan-deps.git/+log/ec231c69caa6..c8e5e8c4c60b Changed dependencies: * glslang: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang.git/+log/77f7cdfb1e..68f073b195 * spirv-cross: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross.git/+log/3327924add..fc9bee27f4 * spirv-headers: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers.git/+log/29ba249312..cfbe4feef2 * spirv-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git/+log/ac335c7634..f449fb4ad9 * vulkan-headers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers.git/+log/63af1cf1ee..95a13d7b71 * vulkan-loader: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader.git/+log/c3eb97de22..8c8619df2d * vulkan-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools.git/+log/4ad4313da0..4e17c284d6 * vulkan-validation-layers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/21078b582d..7b50c36e7a If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/vulkan-deps-angle-autoroll Please CC angle-team@google.com,ynovikov@google.com on the revert to ensure that a human is aware of the problem. To file a bug in ANGLE: https://bugs.chromium.org/p/angleproject/issues/entry To report a problem with the AutoRoller itself, please file a bug: https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: angleproject:8119, angleproject:4883, angleproject:6442 Change-Id: I8d4d0c16ccde26e3455580349bc18fe6a76c2874 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4423456 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Maksim Sisov 0be451a1 2023-04-11T12:10:25 [ios] fix sublayer resize It's only macOS that supports autoresizing mask on CALayers. In case of iOS, a sublayer has to be resized manually. Fixes FramebufferTest_ES3.SurfaceDimensionsChangeAnd\ FragCoord/ES3_Metal test. Bug: angleproject:7994 Change-Id: Ie4f08480a581e7b1b8cfb7e9b47ec3afadc0484f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4403974 Commit-Queue: Maksim Sisov <msisov@igalia.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Roman Lavrov 074b98fe 2023-04-14T12:28:29 Remove unnecessary and unused --interpreter flag. The one we're using is --trace-interpreter and is more clear. Bug: b/276742336 Change-Id: Iea17ca54a17f41a0445cbc4d192ff1d9f5315cf5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4428750 Commit-Queue: Cody Northrop <cnorthrop@google.com> Commit-Queue: Roman Lavrov <romanl@google.com> Auto-Submit: Roman Lavrov <romanl@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Yiwei Zhang 28edde6f 2023-04-13T20:20:33 Vulkan: enable enableCompressingPipelineCacheInThreadPool for venus Try again with aosp/2451163. Bug: b/246683126 Change-Id: Idb66cfbace29349ddf5ed6a96146433098384689 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4426749 Commit-Queue: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov 2c7f31af 2023-04-13T11:47:34 Trace Interpreter: Move to a shared library. Based on https://crrev.com/c/4178024 but does only one thing: makes trace interpreter a shared library (as if it was a compiled trace) I am not sure what impact this actually has on the TracePerfTest callbacks (mentioned in the CL above) as I see onEglMakeCurrent callback getting called without this CL as well. Anyways, this makes things a bit more consistent. * Gets rid of TraceReplayInterface * TraceInterpreter is now an implementation detail * Need to additionally pass list of trace files to TraceLibrary (new SetTraceInfo replay export) * GetResourceIDMapValue is just moved as is to the right lib Bug: b/276742336 Change-Id: I67ea9fbcb4f7db999ab71c8443ea91c5631df942 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4423869 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Mike Schuchardt 6732791c 2023-04-05T10:16:13 Vulkan: Include image layout in DS cache key The image layout for a texture can change from GENERAL to SHADER_READ_ONLY_OPTIMAL when switching from rendering with a feedback loop to not. The descriptor set cache needs to take image layout into account otherwise it can return a false hit in this case, resulting in the re-use of a descriptor set with the wrong image layout and validation error VUID-VkDescriptorImageInfo-imageLayout-00344. This change also includes a regression test to reproduce the behavior of the application where it was observed. Test: angle_end2end_tests --gtest_filter="*FeedbackLoopTextureBindings*" Test: Run com.gameloft.android.ANMP.GloftGGHM on Pixel 6 Bug: b/268091452 Change-Id: I80b4e2373963247a83f8ec17028445f54c820e86 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4400824 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi c26011b8 2023-04-11T15:16:29 Vulkan: Make advanced blend alpha div workaround permanent This workaround turned out to affect pretty much every driver, and numerous GL implementations were found to work around it similarly to ANGLE. It seems like this workaround may only be necessary for colorburn and colordodge, but for now ANGLE applies it to all modes. Bug: b/274528004 Bug: b/277777623 Change-Id: Id555c981a9775f949a3022b7e92c755accea7cea Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4416158 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 663b60b5 2023-04-12T09:51:32 Vulkan: More consistent fix for single buffer ANI semaphore wait Transition into single buffer mode are generating two ANI calls. This CL slightly improves the previous CL (crrev.com/c/4400011)'s handling of ANI semaphore wait for single buffer mode. Instead of catching outstanding ANI semaphore at present time, this CL consumes the semaphore immediately just like layout change Bug: b/275624771 Change-Id: I5418ec47b6bfc77af411c9205e1ae27adeb27976 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4419126 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 9ae918cb 2023-02-03T15:14:00 Reland "Vulkan: SurfaceVk should only wait for GPU work that uses it" This is a reland of commit 5b63e1dc1d5e96018d0ad30582265a612d309f3b The added fix is add contextVk::mLastSubmitQueueSerial into Surface::mUse before calling finish. Original change's description: > Vulkan: SurfaceVk should only wait for GPU work that uses it > > Right now when we destroy swapchain, we call mRenderer->finish() to > finish everything, even though the work is unrelated to this surface. > This CL changes it to only wait for ResourceUse of all images in the > swapChain. > > Bug: b/267806287 > Change-Id: I33d136ad50961fbf5fbb200ff0f89f1dbf23585d > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4220723 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/267806287 Change-Id: I160fd22595fcf292cc53c055e0678befa3b8501b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4406891 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yiwei Zhang fd0ced8b 2023-03-31T15:07:00 Vulkan: remove isVenus from ARM driver version check There're other ARM workarounds no longer needed by Venus atop ARM mali ddk r40p0 and above, so we choose to forward host ARM driver version in Venus: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22242 Bug: b/277833839 Test: workaround enabled with latest venus Change-Id: Ic52d4fe9f3f7e8a6f87aa275e702c99668f5824f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4391232 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Kimmo Kinnunen 3d17e9aa 2023-04-06T12:54:24 Add PLATFORM_IOS again ANGLE_PLATFORM_IOS means "iOS or MacCatalyst". Bug: angleproject:8121 Change-Id: I1482f44a106a1363623e2608b126ccde5548b81e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4404162 Reviewed-by: Dan Glastonbury <djg@apple.com> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Kimmo Kinnunen f507fe05 2023-04-06T12:27:00 Rename PLATFORM_IOS to PLATFORM_IOS_FAMILY The current define ANGLE_PLATFORM_IOS actually means "iOS or tvOS or WatchOS or MacCatalyst". The current define ANGLE_PLATFORM_WATCHOS means nothing. The current define ANGLE_PLATFORM_APPLETV means nothing. Replace PLATFORM_IOS and its uses with PLATFORM_IOS_FAMILY, so that then PLATFORM_IOS can be reintroduced and others can be fixed. Replace PLATFORM_IOS_SIMULATOR and its uses with PLATFORM_IOS_FAMILY_SIMULATOR for consistency. Use consistent `#if X` notation instead of `#if defined(X)`. Bug: angleproject:8121 Change-Id: Ibe668c2ae9bb801d15e036fcf1dfd53f22c30787 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4404161 Reviewed-by: Dan Glastonbury <djg@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Kimmo Kinnunen c19b66f6 2023-04-06T11:30:03 EAGL: Define ANGLE_ENABLE_EAGL in build system ANGLE_ENABLE_EAGL is a "build system" decision. Set this and new variable ANGLE_ENABLE_CGL in BUILD.gn file. This is consistent with the other backends. Remove ANGLE_CPU_ARM64. This was used to do ANGLE_ENABLE_EAGL=TRUE when on Catalyst. Instead, let the build system set this. For ANGLE/Chrome buildsystem, this is not set, as Catalyst is not implemented. For WebKit, this should be set at WebKit build settings. Replace `defined(ANGLE_PLATFORM_MACCATALYST) && defined(ANGLE_CPU_ARM64)` with simpler expression: `defined(ANGLE_ENABLE_EAGL)`. Replace `defined(ANGLE_PLATFORM_MACOS) || defined(ANGLE_PLATFORM_IOS)` with simpler expression: `defined(ANGLE_PLATFORM_APPLE)`. Bug: angleproject:8121 Change-Id: I3a0bbabb4347ad11f693e3f7c336ff12f66203d7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4404160 Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Dan Glastonbury <djg@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Charlie Lao 459f0fad 2023-04-06T13:42:49 Vulkan: Force submit when switch to system framebuffer draw Given recent finding on unnecessary wait for acquire image semaphore, since the semaphore wait is per submission, any GPU will have this same performance problem if we only do command submit per frame. This CL forces submission when we switch draw framebuffer to system default framebuffer, so that the semaphore wait will not block user's fbo rendering. Bug: b/275624771 Change-Id: Id6b941870ef296393c13d0daaf81a41b6c042b9a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4406882 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao d58fbf04 2023-04-05T12:32:09 Vulkan: Wait for surface ANI semaphore only if image is used Right now there is a bug that surface's ANI semaphore is added to context when WindowSurfaceVk::getAttachmentRenderTarget get called, which gets called from FramebufferVk::syncState, which is before we end the previous render pass, due to the endRenderpass usually is deferred until next renderPass starts. This caused ANI semaphore gets added to the previous render pass's submission, which does not use surface, and thus a bubble in GPU execution pipeline where the user FBO rendering gets unnecessarily blocked until ANI semaphore is signaled. This lowers GPU utilization and thus GPU frequency gets dropped and frame time increased. This CL stores ANI semaphore to ImageHelper object and when barrier is generated, the ANI semaphore is moved to CommandBuffer. When CommandBuffer gets flushed and submitted, it gets added to the waitSemaphores vector and submitted to vulkan. Since all use of swap chain image must go through barrier code first (you need at least change layout), this ensures ANI semaphore gets waited in exact and robust way. Only the submission that references the swap chain image will be waited. With this CL, professional_baseball_spirits reduces frame time from 3.8 ms to 2.7 ms, achieving parity with native GLES on pixel 7 pro. Bug: b/275624771 Change-Id: Ifa6cacf9e3bc147bfde54eb7def2fca48c50aca0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4400011 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop 3dd79798 2023-04-07T12:57:05 GLES1: Convert ints to uints for mediump values Mobile drivers are limiting mediump values to 16 bits, which follows the GLSL spec. Our shader was using signed mediump ints for enum values. That limits their value range to [-2^15, 2^15-1], which is [-32768, 32767]. We started failing tests that use TexEnv mode GL_COMBINE (0x8570) which converts to 34160 in decimal, exceeding the range. This translated to a failure to switch on envMode in textureFunction. To fix, convert all the mediump ints in the shader to mediump uints. Test: GLES1ConformanceTest.TexCombine/ES1_Vulkan Test: angle_trace_tests --gtest_filter="*wayward_souls*" Bug: b/277220840 Change-Id: I5219fe1e725c80929906aee3eebd0729a2a29a9b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4409684 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Charlie Lao 65ed3050 2023-04-04T11:57:38 Vulkan: Let recordWriteBarrier use CommandBufferHelper This is preparation for next CL. It changes OutsideRenderPassCommandBuffer argument to OutsideRenderPassCommandBufferHelper for recordWriteBarrier() and recordReadBarrier() calls, so that it has access to the helper object (will be used in next CL). It passes CommandsState to executeBarriers() instead of PrimaryCommandBuffer. No actual functionality change is expected. Bug: b/275624771 Change-Id: Ia06a0398a127539b0b642005803a498cb2a9d7f1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4400407 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 20f875f8 2023-04-05T09:47:46 Vulkan: Add commandQueueWaitSemaphoresTotal perf counter This counts total number of wait semaphores we submitted. This will be used to write test to ensure that we insert wait semaphores properly in future CLs. Bug: b/275624771 Change-Id: I5b8e209500ff553617f6b30c2f8b4626d29c0e6a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4400823 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Kimmo Kinnunen a4341e04 2023-04-06T11:05:07 CGL: Remove the impl preprocessor guards Adhere to the project formatting: - Remove #if preprocessor guards from the CGL implementation. - Order the includes as in style guide - Use include / import consistently - Move GLES_SILENCE_DEPRECIATION into .gn, similar to CGL - Remove or add platform.h include based on whether the file itself actually the platform.h defined macros Simplifies the nested preprocessor macros. Makes it simpler to further fix the preprocessor use. WebKit should instead have a non-ANGLE .mm file #importing the implementations with the proper include guards. Moves macOS specific APIs from SystemInfo.h to SystemInfo_internal.h, since common/platform.h is not available for Chrome clients of SystemInfo.h Bug: angleproject:8121 Change-Id: Iaef0d6948fbcef6d1c2e7877477d25ccc259cc2c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4404159 Reviewed-by: Dan Glastonbury <djg@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Yiwei Zhang 854264e3 2023-04-11T06:18:44 Vulkan: enable precisionSafeDivision for venus ..otherwise the legacy org.skia.skqp.SkQPRunner#gles_xfermodes2 SkQP cts will fail across our host Vulkan implementations: mali, anv, radv, tu. Btw, radv has been lucky due to the existing isAMD condition satisfied. Bug: b/274528004 Change-Id: I39debe4e58d8afff0671809ac19cf9be8637f73e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4413212 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov f0848fc5 2023-04-11T10:17:48 Move targetSdkVersion to Android.bp and set to system_current Also adds android:exported="true" which is required for newer SDKs. Bug: b/275459680 Change-Id: I8ae5b67c1d3ccca867139fc1d9043308e03ffb6c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4414227 Reviewed-by: Cody Northrop <cnorthrop@google.com> Auto-Submit: Roman Lavrov <romanl@google.com>
Amirali Abdolrashidi 23ec0620 2023-03-23T09:51:53 Vulkan: Add more data to blob cache header This is to potentially increase blob cache robustness against collisions and partially modified data. This CL adds 7 bytes per chunk (8 bytes in total). During decompression, the data will be checked in order to determine if the cache data can be used. * Added chunk index to the header. (1 byte) * Added CRC16 of the compressed data to the header. (2 bytes) * Added the original (uncompressed) data size to the header. (4 bytes) * Moved kBlobHeaderSize to the anonymous namespace. * Added the following GN flag to enable CRC calculation for the cache. * angle_enable_crc_for_pipeline_cache (only available in debug mode) * Corresponds to kEnableCRCForPipelineCache. * When it is false, the CRC is set to 0. Bug: b/246683126 Change-Id: I9aaf9cda52e0af07a2e1c2d0c39aca407e515701 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4378717 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Kimmo Kinnunen cfc21f23 2023-04-06T18:39:26 Fix GetCurrentThreadUniqueId on Release APPLE Fix GetCurrentThreadUniqueId on Release builds of ANGLE_PLATFORM_APPLE. Code inside ASSERT() is discarded when compiling on Release. Instead, create the pthread per-thread keys outside ASSERTs and just assert the results. Bug: angleproject:8122 Change-Id: I89b7bd66f4346a94ec5c67eedda637f012ba7ff6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4406215 Reviewed-by: Kenneth Russell <kbr@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Dan Glastonbury <djg@apple.com> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Kimmo Kinnunen 79a2f7e4 2023-04-06T10:42:19 EAGL: Remove the impl preprocessor guards Adhere to the project formatting: - Remove #if preprocessor guards from the EAGL implementation. - Order the includes as in style guide - Use include / import consistently - Move GLES_SILENCE_DEPRECIATION into .gn, similar to CGL - Remove or add platform.h include based on whether the file itself actually the platform.h defined macros Simplifies the nested preprocessor macros. Makes it simpler to further fix the preprocessor use. WebKit should instead have a non-ANGLE .mm file #importing the implementations with the proper include guards. Bug: angleproject:8121 Change-Id: I775bedd048fe3382f873abffb693f130f6104c5c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4404158 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Dan Glastonbury <djg@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Geoff Lang 36296928 2023-03-31T16:44:35 Mark RGBX and BGRX formats as having 8 unused bits. This makes sure that pixelBytes ends up being 4 and fixes potential buffer size validation. Fix EGL configs using pixelBytes to compute EGL_BUFFER_SIZE which is not supposed to include unused bits. This is covered by dEQP-EGL.functional.query_config.constraints.color_buffer_size Bug: chromium:1404790 Change-Id: I47a6e825f3b47501fd0984c21554c394fef32eb6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4390022 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Igor Nazarov be3d7e6b 2023-03-30T14:35:18 Remove redundant g_SurfaceMutex. This mutex become redundant after recent CL: https://chromium.googlesource.com/angle/angle/+/23ad4fa2be35aed303cbb8c2d632a04714354ef0 Don't hold global surface lock during AcquireNextImage Every place in the code where `ANGLE_SCOPED_GLOBAL_SURFACE_LOCK()` is used also uses `ANGLE_SCOPED_GLOBAL_LOCK()`. Bug: angleproject:6851 Change-Id: I464b6ca74743c9ee9fa23caad216f0e26c480655 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4385293 Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Geoff Lang 1e9182a5 2023-04-05T12:54:30 Disable staged uploads to packed texture formats on AMD. The same formats are having upload failures on AMD drivers. Bug: chromium:1430857 Change-Id: I8364d5646ff6811db09710ac27d2ac0f6dfdc116 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4401891 Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev f33c16e3 2023-03-27T00:00:00 Add SampleVariablesTest * Increased required OpenGL context version to 4.2 to disable the extension on older platforms that do not pass the tests. Bug: angleproject:8097 Change-Id: I9158d895f0b0ec80db2516cc126e89ff5da753e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4401931 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 9a2ef389 2023-04-04T14:57:09 Vulkan: Minor protected submitCommands() optimization. Bug: angleproject:3965 Change-Id: I52a7597f1dd3bdaf4a221c6b6338caa1577c08f9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4392876 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Ian Vollick 9199e77d 2023-03-30T17:25:33 [ios] simulator fixes for angle_unittests Disables some tests that do not currently work in the iOS simulator. Bug: angleproject:8116 Change-Id: I66bb9a6e2a5d10a567824e9fac163e7fd6b6a474 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4393495 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Shahbaz Youssefi 8b79410b 2023-04-02T22:25:12 Vulkan: Treat readonly SSBOs as readonly! Instead of assuming SSBOs are always written to, this change adds plumbing for the backend to know when an SSBO is declared readonly and marks the buffer readonly accordingly. With this change, BufferVk can optimize uploads and copies to and from the buffer with the knowledge that it can be safely mapped on the CPU for read while it's being used by the GPU. Bug: b/276002151 Change-Id: I75342148c07949a83436054a738395bbd88caec5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4392720 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 25e60197 2023-03-31T14:17:26 Vulkan: Unify buffer alloc strategy for uploads and GPU copies With this change, glCopyBufferSubData uses the same buffer allocation strategy as glBufferSubData. Only exception is with buffer self-copies which never allocate a new buffer for simplicity. Additionally, this change allows glCopyBufferSubData to be done on the CPU if possible, i.e. if the source buffer is not being written to by the GPU and whenever the equivalent glBufferSubData would have used a CPU upload. Bug: b/276002151 Change-Id: Ice8df5891c5516b148245d5d6fa9b19b787df4ce Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4390023 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov b49f9520 2023-04-03T18:11:04 Trace Interpreter: Improve ReadFileToString performance. Shaves off ~1s (~15%) from ~7.5s parse time on Panther for minecraft_bedrock trace. Switches the stream to std::ios::binary so on Windows the caller will need to handle \r\n Bug: b/276742336 Change-Id: I0c14e76168763875da60a0fdefb879859b0b3d0c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4392894 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov b30c05de 2023-04-04T09:36:28 Trace Interpreter: Add #include <algorithm> ANGLE-Dawn roll failed with: error: no member named 'lower_bound' in namespace 'std' Bug: b/276742336 Change-Id: Ife3d83aaa2b9f29f3750e880a12dfccf3f8fe915 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4391765 Auto-Submit: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 41f0a321 2023-04-03T21:58:43 Revert "Vulkan: Reactivate already started render pass when possible" This reverts commit ad9537af7f2bb5e22bc73f4e833fd3789adaa217. Reason for revert: Suspected cause for flakiness. anglebug.com/8118 Original change's description: > Vulkan: Reactivate already started render pass when possible > > In some usage case (such as lineage_mobile), we are seeing in the middle > of render pass, app switch to another fbo just to issue a glClear() > call, which the clear call itself gets deferred. Application then switch > back to the original frame buffer. Before this CL, the render pass gets > recreated due to frame buffer binding change, even though the clear gets > deferred and new render pass and the previous render pass are > essentially the same. This CL detects this situation and reactivate the > current render pass instead of creating a new one. With this CL, > lineage_m app trace reduces frame time from 3.86ms to 3.7ms, and only > one render pass is used instead of two. > > This CL also allows the render pass started by BlitFramebuffer reused by > subsequent draw calls. Asphalt_9 is hitting this use pattern and this CL > reduces frame time by 0.1245 ms (from 5.6203 ms to 5.4958 on pixel 7 > pro) > > Bug: b/273808966 > Change-Id: I48c2671cbef3ff9d6cf59caae88c37c77828ee07 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4348713 > Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/273808966 Change-Id: I81cc2dcacb52466808b2ccf5819feda466c39fc5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4396502 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Auto-Submit: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 3aea3cfd 2023-04-03T16:38:29 Vulkan: Workaround depth bias constant factor on ANV Bug: b/249380591 Change-Id: Iaeda7faf5eb40e0e2086674d3e63bf5bc9911ab4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4392893 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov c723d71f 2023-04-03T16:17:01 Trace Interpreter: Improve StringToGLenum performance. Binary search instead of linear. This gets called a lot when parsing traces to be run by the trace interpreter. I saw ~37 seconds parse time on Panther for minecraft_bedrock trace, this CL makes that ~5 times faster. Bug: b/276742336 Change-Id: Ide32c247b327f36c00f26951a90e4412d71db2b6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4392892 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Roman Lavrov <romanl@google.com>
Charlie Lao 96cda1ac 2023-03-31T15:08:11 Vulkan: Switch to modified framebuffer should trigger submit The feature flag preferSubmitAtFBOBoundary intended to trigger submitCommands call when FBO is switched. Right now there is a bug that when FBO is switched, submitCommands did not get called even if feature is enabled. The reason is that when framebuffer changed, we first get FramebufferVk::syncState call, and if the FBO that we switched to is drity, we will end up calling ContextVk::flushCommandsAndEndRenderPass to immediate end the render pass. The problem with that is that later on when we get to ContextVk::syncState and saw DIRTY_BIT_DRAW_FRAMEBUFFER_BINDING dirty bit and try to issue a submit, we notice render pass already ended, so mHasDeferredFlush never gets set, which means we never call submitCommands. All apps render to system framebuffer in the last render pass, and system framebuffer is always dirty due to swap chain image rotation, we hit this almost with every app. This CL avoid flushCommandsAndEndRenderPass() call from FramebufferVk::syncState. We now relies on ContextVk::onFramebufferChanged (which calls onRenderPassFinished() which will set DIRTY_RENDER_PASS bit to trigger deferred endRenderPass) to end the current render pass. This CL also add a regression test to ensure the submit indeed occur. Bug: b/275624771 Change-Id: I92b95a7a6c435f242d6684cb7852172cf41896c3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4390642 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Roman Lavrov <romanl@google.com>
Shahbaz Youssefi c5e9de23 2023-04-03T15:14:03 Revert "Vulkan: Use midRenderPass clear if RP has started but inactive" This reverts commit 98151770adfd990c533991da27615b4879494307. Reason for revert: Suspected cause for flakiness. anglebug.com/8118 Original change's description: > Vulkan: Use midRenderPass clear if RP has started but inactive > > This CL extends prior CL's optimization so that if clear is issued right > after blitFramebuffer call (this could make sense if blit and clear are > on different buffer), we can keep the started render pass and do the > midRenderPass clear instead of endRenderPass and start another > renderPass. > > Bug: b/273808966 > Change-Id: Ia2504e8e260867a6f797d42cd4c8a72f187280ef > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4374145 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/273808966 Change-Id: I7a11635a6eceafb6f4fb3a0d95f6627ee98321c0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4393497 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang f1f80e1e 2023-03-22T12:54:08 Metal: Always prefer staged GPU uploads for textures. Uploading Metal texture data via MTLTexture::replaceRegion is a source of lots of CPU hangs and jank. There may be better heuristics to determine if we should do a CPU vs GPU upload but for now preferring GPU uploads has better overall performance. This also improves the MotionMark images test: - 40 -> 100 when using Metal. - 217 -> 235 when using Metal + https://chromium-review.googlesource.com/c/chromium/src/+/4091749 Bug: angleproject:8024, angleproject:8092, angleproject:8109 Change-Id: I36b5f585884391b4cc416365ae65f8542745beee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4264963 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Igor Nazarov ec307af4 2023-03-30T14:17:52 Fix bug in DeallocateGlobalMutex(). Bug: angleproject:6851 Change-Id: Ie5dd32220a38a9b7a9a18ff830a4ee7b7c02b9c3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4381863 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com>
Igor Nazarov a1319e7f 2023-03-29T20:09:48 Tests: Fix EGLContextSharingTestNoFixture.SwapBuffersShared. Sometimes `swapThread` may finish until `renderThread` wait for `Step::TextureInitialized` step. In this situation `swapThread` will change `currentStep` to `Abort` in the `ThreadSynchronization<>` destructor, causing wait for `Step::TextureInitialized` to fail. Bug: angleproject:6851 Change-Id: Ib08b6de11873e9959eaa810bcf8cb404c95c80d4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4381626 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Alexey Knyazev b24b5568 2023-03-27T00:00:00 Vulkan: Skip sample coverage for single sample rendering A new test sets sample coverage to zero and checks that it is applied only to multisampled rendering. Bug: angleproject:8102 Change-Id: I1a5649869e9b7ecf0543108fb99095bfaf6fd858 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4379839 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Cody Northrop 55fbc2c5 2023-03-31T13:15:19 Revert "Tests: Add Gacha Life trace" This reverts commit 98deaef0ebf2709f45e75e5571bb52aa4c8d6246. Reason for revert: angle_trace_test_apk is too large to sign Before this trace, if you compiled the APK with all traces enabled, we were right on the edge of MAX_INT (2147483647). ApkSigner doesn't support 64-bit offsets. Original change's description: > Tests: Add Gacha Life trace > > Test: angle_trace_tests --gtest_filter="*gacha_life*" > Bug: b/267382443 > Change-Id: I6bbfb28015bf0317ccdba699e08ce6bce51b4ce3 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4211589 > Reviewed-by: Roman Lavrov <romanl@google.com> Test: autoninja -C out/AndroidPerformance angle_trace_tests Bug: b/276474703 Change-Id: I1a3fd6386f20dc498e4f8c8b147d4431277ecc50 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4387371 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Roman Lavrov <romanl@google.com>
Maksim Sisov 61cd24d4 2023-03-31T14:54:17 MTLPixelFormatRGB9E5Float is not renderable on simulator. See https://developer.apple.com/documentation/metal/ developing_metal_apps_that_run_in_simulator?language=objc Bug: angleproject:7994 Change-Id: I07e50c19aaf6d033c7c25d0dbd4b21a8c255c1d9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4386403 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Kimmo Kinnunen f176027f 2023-03-31T13:37:03 CGL: implement EGL_ANGLE_wait_until_work_scheduled It is as important to wait until scheduled in CGL, as it is in Metal. CGL waits until scheduled when glFlush() is called. Fixed: angleproject:8112 Change-Id: Id4a9e87804c6df1828b35cfd30c8427314820e52 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4386400 Commit-Queue: Kenneth Russell <kbr@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Shahbaz Youssefi 552d4271 2023-03-31T10:59:30 Vulkan: Refactor buffer init logic Bug: b/276002151 Change-Id: I28d3fa34ab11340cc8b38743e87664a514870068 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4388547 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Cody Northrop 98deaef0 2023-03-30T19:15:24 Tests: Add Gacha Life trace Test: angle_trace_tests --gtest_filter="*gacha_life*" Bug: b/267382443 Change-Id: I6bbfb28015bf0317ccdba699e08ce6bce51b4ce3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4211589 Reviewed-by: Roman Lavrov <romanl@google.com>
Constantine Shablya e975f9dc 2022-11-09T06:44:06 Capture/Replay: handle paletted textures Add a method for recompressing paletted textures on capture. Bug: angleproject:7710 Change-Id: I11af0c1cd7c3b63850c5daf96eafcd3efce65f16 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4178311 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 336bfd60 2023-03-30T00:16:40 GL: Fix the RewriteRepeatedAssignToSwizzled workaround This transformation splits chained assignments where the LHS is assigning to a swizzle. However, instead of retaining the assignment operator (like *=, += etc), it was accidentally unconditionally using `=`. Bug: chromium:1394345 Change-Id: Icaef159e1fb57e720e08d4b4f6603f08d9cd2bfe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4381648 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Cody Northrop f066ae7d 2023-03-30T19:01:17 Tests: Add Teslagrad trace Test: angle_trace_tests --gtest_filter="*teslagrad*" Bug: b/276316424 Change-Id: If4056451ba3b948ade8466f93560694f76ab53c5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4385779 Reviewed-by: Roman Lavrov <romanl@google.com>
Colin Blundell 6458cd95 2023-03-30T14:27:07 [GL backend] Remove over-zealous ASSERT in StateManagerGL.cpp StateManagerGL::bindVertexArray asserts that the passed-in |vaoState| pointer is non-null; however, we actually pass in null directly in [1]. This assert goes off when running a WebView test with ANGLE. [1] https://source.chromium.org/chromium/chromium/src/+/main:third_party/angle/src/libANGLE/renderer/gl/StateManagerGL.cpp;l=3385;drc=48340c1e35efad5fb0253025dcc36b3a9573e258;bpv=1;bpt=1 Bug: chromium:1168587 Change-Id: I14d5f9f317f3cbe2a828ab7637edc5f1911bf81c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4381861 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Yuly Novikov a3a649b0 2023-03-31T09:16:48 Skip BlitFramebufferTest.scissorDrawBlitAndDrawAgain on Mac AMD GL Fails since added in https://ci.chromium.org/ui/p/angle/builders/ci/mac-exp-test/258/overview Bug: b/273808966 Change-Id: I62f8876e4d177983082b3e21e50803c9c7fab0d4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4386397 Auto-Submit: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Dean Jackson 5fcd027e 2023-03-29T08:54:34 Fix the watchOS build for the mirror clamp to edge extension The mirror clamp to edge extension relies on MTLSamplerAddressModeMirrorClampToEdge, which is not available on watchOS. Disable the extension there for the moment. Bug: angleproject:8103 Change-Id: I52b9d5217b39080cde6663e0d0fa839e53dacecf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4379037 Reviewed-by: Kenneth Russell <kbr@chromium.org>
Charlie Lao 20f3df07 2023-03-30T11:36:29 Vulkan: ImageHelper::initExternal missing some variable init When ImageHelper::releaseImage is called and then re-initialized (due to mipmap change or usage change etc), right now we have a bug that mCurrentShaderReadStageMask and mLastNonShaderReadOnlyLayout are still left as is. And they do not get reset when image is initialized. This means if the image was reinitialized again, it may end up think the new image was previously used by fragment shader and insert an unnecessary barrier when new VkImage is used. This was discovered when I do the experimental work try to ghost VkImage for glTexSubImage call and realized that new VkImage was having a strong fragment->vertex dependency which it should not (since this is a new VkImage). This CL initialize mCurrentShaderReadStageMask and mLastNonShaderReadOnlyLayout and mCurrentQueueFamilyIndex from initExternal call since it is a new vkImage. Bug: b/273808966 Change-Id: I5bbeae5f1012f10c24620cfae8fa20365a7b5ab7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4386136 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 98151770 2023-03-27T09:49:33 Vulkan: Use midRenderPass clear if RP has started but inactive This CL extends prior CL's optimization so that if clear is issued right after blitFramebuffer call (this could make sense if blit and clear are on different buffer), we can keep the started render pass and do the midRenderPass clear instead of endRenderPass and start another renderPass. Bug: b/273808966 Change-Id: Ia2504e8e260867a6f797d42cd4c8a72f187280ef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4374145 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao ad9537af 2023-03-16T16:03:29 Vulkan: Reactivate already started render pass when possible In some usage case (such as lineage_mobile), we are seeing in the middle of render pass, app switch to another fbo just to issue a glClear() call, which the clear call itself gets deferred. Application then switch back to the original frame buffer. Before this CL, the render pass gets recreated due to frame buffer binding change, even though the clear gets deferred and new render pass and the previous render pass are essentially the same. This CL detects this situation and reactivate the current render pass instead of creating a new one. With this CL, lineage_m app trace reduces frame time from 3.86ms to 3.7ms, and only one render pass is used instead of two. This CL also allows the render pass started by BlitFramebuffer reused by subsequent draw calls. Asphalt_9 is hitting this use pattern and this CL reduces frame time by 0.1245 ms (from 5.6203 ms to 5.4958 on pixel 7 pro) Bug: b/273808966 Change-Id: I48c2671cbef3ff9d6cf59caae88c37c77828ee07 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4348713 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Geoff Lang 3c8aee63 2023-03-27T13:24:47 D3D11: Fix streamed instanced attribute size calculation. D3D11 passes around a 0 instance count to signify "not an instanced draw call". This had an incorrect interaction with ComputeVertexBindingElementCount which checks for an instance count of 0 and skips instancing calculations. Force instance count to be at least 1 when computing buffer size needed. Bug: chromium:1425606 Change-Id: Ia10fa1c11abebce28c57ce4527e2b748e51516ce Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4375138 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>