src/libANGLE/renderer/vulkan/RendererVk.cpp


Log

Author Commit Date CI Message
Shahbaz Youssefi 053d152d 2022-07-04T21:20:34 Vulkan: Resolve GoogleX MSRTSS conflict with EXT Now that the extension is public, rename the old symbols to GoogleX as they have shipped previously. This reverts defd99dc4. Bug: chromium:1088005 Change-Id: I5ac7f73e24084e26a8b2d9cf742c7ab9b3c80984 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3744362 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Antonio Caggiano 007a4f06 2022-04-22T11:07:05 Vulkan: Wayland resize callback Handle client resize requests and resize the swapchain accordingly after next buffer swap. Bug: angleproject:6902 Change-Id: I8bd6b0d4efac041606f15eccb6befa28594905b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3608089 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jeff Vigil <j.vigil@samsung.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 9070e279 2022-06-30T09:35:59 Vulkan: Handle platforms that have imprecise float division issues Even when the dividend and divisor have the same value some platforms do not return 1.0f. We need to emit sepcial division code on such platforms. Bug: angleproject:3586 Tests: KHR-GLES31.core.blend_equation_advanced.blend*HSL* Change-Id: Ibb81f57c959ae2c8edb6d361bf6241c019dfb988 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3738439 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu 1e96beb9 2022-06-29T15:18:35 Suppress the new BestPractice VVL Error Suppress the new best practice VVL Error vkCmdBeginRenderPass-ClearValueWithoutLoadOpClear to unblock the vulken-deps roller. A potential fix is work in progress. Bug: angleproject:7470 Bug: b/237542876 Change-Id: Iaea0cef58984acae79210e72b75be527d98e8286 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3736698 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi ba737f47 2022-06-27T11:04:21 Vulkan: Don't sync pipeline cache if warm up is effective If the pipeline cache is being warmed up at link time, the blobs corresponding to each program is individually retrieved and stored in the blob cache. This should be enabled only on platforms where draw time pipeline creation hits the cache due to said warm up. As a result, there's no need to store the aggregate cache (the one owned by RendererVk) in the blob cache too. Bug: angleproject:5881 Bug: b/215230983 Change-Id: I2da5de835e6667b0b2d5859e6804791671888947 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3727227 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
angle-autoroll bb373176 2022-06-24T14:19:05 Roll vulkan-deps from 11ad77222bfe to 137b026580e5 (1 revision) Suppress new SYNC-HAZARD-READ_AFTER_WRITE. https://chromium.googlesource.com/vulkan-deps.git/+log/11ad77222bfe..137b026580e5 Changed dependencies: * vulkan-validation-layers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/620b378993..a0e0e77a22 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 jonahr@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:7456 Tbr: jonahr@google.com,ynovikov@google.com Change-Id: I2ef42cccfabd575cd59c90e6f558b6a46202e028 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3723547 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Steven Noonan 10f065e2 2022-06-23T13:23:09 Vulkan: support QCOM_shading_rate on Intel graphics When querying fragment shading rates, we were limiting the result array to 6 elements, which was not enough on Intel's Windows graphics drivers. Those drivers report more than 6 fragment shading rates, including a bunch of strange ones like 4x1 and 1x4. Because we limited the list to 6 elements, and the Vulkan specification requires that the rates be listed in order from largest width to smallest, the feature check was missing the smaller shading rates (including 1x2 and 1x1). This caused the supportsFragmentShadingRate feature to be disabled. Bug: angleproject:7461 Bug: angleproject:7172 Change-Id: I1b9a2924f93fdb803c20cfa388749754691b6e92 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3720732 Auto-Submit: Steven Noonan <steven@valvesoftware.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi e50351cb 2022-06-10T22:28:58 Vulkan: Don't close render pass on framebuffer fetch For applications that use framebuffer fetch in the same RP as non-fetch programs, we can save some extra RenderPasses by always creating our RP objects with input attachments enabled. This works almost identically except for needing to use the images in a "GENERAL" layout instead of "COLOR_ATTACHMENT_OPTIMAL". According to partners it is possible to achieve performance parity even with GENERAL layout. To remove any potential negative impacts of using the GENERAL layout, the context enters this always-framebuffer-fetch mode only and as soon as a framebuffer fetch program is created. Applications that don't use framebuffer fetch are thus unaffected. This eliminates 20 render passes in the Genshin Impact trace (out of about 58). On a Pixel 6 the resulting benchmark score speeds up by ~25%. For Real Racing 3, the speed up is ~30%. Based on change by jmadill@chromium.org Bug: angleproject:7375 Change-Id: Ib6c73e95d06229f8545d502b388ee2a55a582323 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3697308 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Eddie Hatfield 91976352 2022-06-21T15:41:02 Use C++17 attributes instead of custom macros Bug: angleproject:6747 Change-Id: Iad6c7cd8a18d028e01da49b647c5d01af11e0522 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3718999 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 7f57d12b 2022-06-17T22:29:36 Vulkan: Disable cache warmup on ChromeOS SwANGLE A number of browser tests fail due to the cache warm up changing the timing of the tests. The bug is in the tests, but this change unblocks ANGLE roll into Chromium. Bug: angleproject:7440 Change-Id: Ie2d7618bfc367bd34f9b99982c9323c99188c626 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3708995 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 97a6e581 2022-05-30T16:50:26 Vulkan: Useful implementation of program binaries ANGLE already serializes the pipeline state for the sake of OES_get_program_binary. This serialization had limited usefulness however, since the Vulkan driver hasn't actually created any pipelines yet (which is a costly part of program creation). Simultaneously, ANGLE deferred Vulkan pipeline creation to draw time, which causes hitching. In this change, a handful of Vulkan pipelines are precreated at link time; those at least that are sure to create different blobs in the pipeline cache (different spec consts or SPIR-V generation). These pipelines are created in the program executable's cache. The cache is then merged into the shared renderer cache (for potential blob reuse by other programs). With this, two goals are achieved: - Most pipelines created at draw time hit the pipeline cache, avoiding costly compilation. - When the program binary is retrieved, the contents of the program executable's pipeline cache is also returned. On reload, the cache is recovered, resulting in faster startup. Bug: angleproject:5881 Change-Id: I46c5451a7d0b16dffd40e44015e094640886880b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3671977 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 0bc70e96 2022-06-10T22:27:04 Vulkan: Rename getShareGroupVk to getShareGroup + other miscellaneous clean up Bug: angleproject:7375 Change-Id: I25690860478a2fd181a67ce2b6cb4d7aac7dbaa7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700197 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Ian Elliott 3c81c9d1 2022-06-14T19:24:27 Enable perFrameWindowSizeQuery on Android It was decided that Android won't return VK_SUBOPTIMAL_KHR when the window size changes. Android's Vulkan loader no longer needs IPC to implement vkGetPhysicalDeviceSurfaceCapabilitiesKHR(). Therefore, we will call vkGetPhysicalDeviceSurfaceCapabilitiesKHR() per eglSwapBuffers() on Android. Bug: b/236026298 Change-Id: I3f66148ef5ed456e4408d64cc38fc6e0fe8b17cd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3706160 Reviewed-by: Chris Forbes <chrisforbes@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Ian Elliott <ianelliott@google.com> Auto-Submit: Ian Elliott <ianelliott@google.com>
Shahbaz Youssefi 715175de 2022-06-03T22:11:30 Vulkan: Don't enable Qualcomm workarounds on OSS driver Bug: b/217265716 Change-Id: I09cf38a36f8297912f0c26867155cf4f9e145919 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3689810 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Chia-I Wu <olv@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@google.com>
Ian Elliott 0f8f760d 2022-06-07T17:52:52 Disable KHR_no_error for Android/SwiftShader Speculatively fix crash in Skia on ANGLE that has been happening. In addition, prevent other crashes in the future. Bug: b/220069903 Change-Id: I01b9896a6feb8be524849dafbc1df9526fc98754 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3694160 Commit-Queue: Ian Elliott <ianelliott@google.com> Auto-Submit: Ian Elliott <ianelliott@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu 5fbb0417 2022-05-26T15:05:52 Vulkan: Handling VK_EXT_load_store_op_none on ARM There is a bug on at least one ARM device when either depth or stencil load op is none. Add a temporary work around to avoid this case for ARM driver until angleproject:7370 is addressed. Also add a test to reproduce the deqp test failures with simiplied draw calls. Bug: angleproject:7370 Bug: angleproject:7351 Change-Id: I74ac49a75f85b1e006ed3b1d77f234f63d314ae0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3671696 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi d47c8e0a 2022-04-04T15:08:45 Vulkan: Enable custom border colors on SwiftShader This extension can now be enabled on SwiftShader after bug fixes that landed in https://swiftshader-review.googlesource.com/c/SwiftShader/+/64688 and https://swiftshader-review.googlesource.com/c/SwiftShader/+/66148 Bug: angleproject:6200 Bug: b/227518327 Change-Id: I65fb342a96c47b1ea5ba2ee773c8ae5539052b94 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3569585 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 4ea62009 2022-06-07T15:35:51 Vulkan: Prefer driver uniforms over spec consts On hardware that's not seeing any benefit from specialization constants, this change switches to using driver uniforms to reduce the number of pipelines created. Bug: angleproject:7406 Bug: b/173636783 Change-Id: Ic1ea1b389b0b27169427643f811370943195f331 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3692270 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 53ec886e 2022-05-30T16:49:11 Vulkan: Externally synchronize the pipeline cache In preparation for a future change that requires this as it may perform pipeline cache merges during creation of pipelines. Bug: angleproject:5881 Change-Id: Ic7921b781aa773ae23b60a0bb6fa2111b1fc401e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3679479 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 28b4c378 2022-05-27T15:45:59 Vulkan: Pipeline creation feedback in perf counters Bug: angleproject:5881 Change-Id: I42917cab3c97abb50a14035972a96728dcb990b9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3672851 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Jamie Madill 1ce69722 2022-05-18T13:05:22 Vulkan: Track used command buffers in ResourceUse. The list of command buffers to ResourceUse will replace tracking resources in a CommandBufferHelper. Currently the two tracking methods live side-by-side, and the old method will be removed in a future CL. Bug: angleproject:5664 Change-Id: Ia04d77e72c508e10b549db8c8dd5f0472e4edc83 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3656069 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi a2fe4445 2022-05-26T12:42:39 Vulkan: Sync pipeline cache only when truly changed The Vulkan pipeline cache was considered dirty when ANGLE added a new pipeline. However, a new pipeline doesn't necessarily translate to new blobs in the pipeline cache. With this change, the cache is synced only if its size has changed. Bug: angleproject:5881 Change-Id: I0226426680f1e6b0e2bfde66ea6409362b8e72c9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3668835 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 7c83a363 2022-05-16T22:22:44 Vulkan: Dynamic state for rasterizer discard enable Interaction with primitives generated query are tested by those tests added in https://chromium-review.googlesource.com/c/angle/angle/+/2976181 Bug: angleproject:5906 Change-Id: I0ab9f54995504be770a93bf13337a5ffe20bf7eb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3651582 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 58fd3157 2022-05-12T00:01:19 Vulkan: Dynamic state for vertex stride Bug: angleproject:5906 Change-Id: I73b7e004fc25bf3777982736412adc1ca57504b9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3644856 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Yuxin Hu 728dea2b 2022-05-19T13:04:58 Suppress Vulkan Validation Error Suppress Vulkan Validation Error to unblock the vulkan-deps roller. We should remove the suppression when the VVL issue in the commit e23f82fc84c891b3a34e6e8787913b335cbe3934 in Vulkan-ValidationLayers.git is resolved Bug: angleproject:7338 Change-Id: I3322a5b10d271dcd95da9354328facf7e3b9113d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3651531 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 2fdd7bfd 2022-05-17T13:31:58 Vulkan: Support binding 2D slice of a 3D texture to an image unit Support binding a 3d texture as a 2d texture by specifying that it is non-layered during glBindImageTexture and expose support for EGL_KHR_gl_texture_3D_image when VK_EXT_image_2d_view_of_3d vulkan extension is supported. Tests: ComputeShaderTest.BindImageTexture3D dEQP-GLES31.functional.image_load_store.3d.*single_layer Bug: angleproject:7320 Change-Id: Ie2f0dfcdf302a4aa58990f74329ca36e62cd3902 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3648586 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Peng Huang bedb3075 2022-05-16T09:46:11 Do not call RendererVK::handleDeviceLost() for device lost RendererVK::handleDeviceLost() need to hold the mCommandQueueMutex for releasing some resources. For some cases, Locking mCommandQueueMutex may cause deadlock, because the same lock has been acquired by the same thread. Fix the problem by not calling RendererVK::handleDeviceLost() for device lost. It is OK, because RendererVK::onDestroy() will call handleDeviceLost() if the device is lost already. Bug: chromium:1273643 Change-Id: Iaaa77bdf429b703363d4155323b91baf5947d95e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3644641 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 4e5da2d2 2022-05-11T13:58:07 Vulkan: Dynamic state for cull mode Bug: angleproject:5906 Change-Id: I3d7b888e7999d4892ff71d636ea16a2edcf7a27f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3642800 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu 808192a7 2022-05-09T16:39:45 Code Cleanup In Context::initCaps(), we first read the compressedTextureFormats from the contextImpl::getNativeCaps(), then we are clearing the retrieved compressedTextureFormats array in Context::updateCaps() immediately. We shouldn't need to fill the same array twice. Removing the first array value assignments in all backend. Bug: angleproject:3408 Change-Id: Iea85d367d2c5792de4780995d8d03bcf14af484e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3635275 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Min Zhang e56f227d 2022-05-13T08:50:12 Vulkan: Add case: TextureSampleByDrawDispatchDraw This case is used to verify the implicit synchronization when GL executables switch from draw to dispatch. Besides, suppress a VVL on it. Bug: angleproject:7031 Change-Id: Idab68cfd0d4b17685f5eb5b3eec7f2cad12e5877 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3646927 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 31321cb7 2022-05-09T16:17:25 Vulkan: Remove suppressions and workarounds for old AMD/Windows The old AMD/Windows bots are decomissioned. This change removes suppressions and workarounds that were added for that bot. Bug: angleproject:2463 Bug: angleproject:2809 Bug: angleproject:2847 Bug: angleproject:3243 Bug: angleproject:4720 Bug: angleproject:6123 Bug: angleproject:6652 Bug: angleproject:7144 Bug: angleproject:7227 Bug: chromium:1224996 Change-Id: I333ed6d76dfa2916b713ccb49127deceb5b1b551 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3634728 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yiwei Zhang e316203a 2022-05-07T21:31:52 Vulkan: add forceContinuousRefreshOnSharedPresent feature Android EGL wrapper filters EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID, making it impossible for angle to provide an implementation for EGL_ANDROID_front_buffer_auto_refresh. Thus angle currently is only able to choose demand refresh for swapcahin present mode. This change adds a feature to force angle to create the swapchain with continuous refresh mode without affecting angle internal tracking for shared present. This feature will be enabled on integrations without the auto_refresh hint passthrough to angle, as well as before the platform allows angle to implement EGL_ANDROID_front_buffer_auto_refresh on its own. Bug: b/229267970 Test: angle_end2end_tests --gtest_filter="EGLSingleBufferTest*" Test: smooth draw with gpu accelerated low latency stylus in ChromeOS Change-Id: I29d72830d4e3d9fd5cdd44b8e1ce51fd7d9789fa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3633358 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 333da2cf 2022-05-03T16:21:41 Vulkan: Limit the total bytes of suballocation garbages in flight This CL tracks the total number of bytes of suballocation garbage. It checks against the limit so that when there are excessive garbages in flight, we will wait for GPU to finish and free up some of these memory before continue. That way we will ensure we do not end up accumulating too much memory and end up with low memory kill on mobile devices. Bug: b/230538246 Change-Id: Ic8292db5617bcee4ec3abe8632f54edfd249cfaa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3617226 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 51dc3c3e 2022-05-02T18:11:26 Vulkan: Force prune when there are lots of suballocations destroyed If there are a lot of suballocations destroyed, there is bigger chance that some buffers become empty and we might able to trim down excessive empty buffers. This CL tracks the suballocations destroyed at each cleanupGarbage call and use that information to force immediate pruneEmptyBuffers call. Bug: b/230538246 Change-Id: Icca2ea731639545c635c09d58a8606d67405e1a6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3620981 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
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>
Shahbaz Youssefi c7a9f0c6 2022-04-27T16:20:51 Vulkan: Remove syncval suppressions no longer triggering Bug: angleproject:6422 Bug: angleproject:6424 Bug: angleproject:6566 Change-Id: If4d6cf097108f71732d093f3debfc30475a3c90c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3612183 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 3eb2bcf7 2022-04-27T16:13:04 Vulkan: Fix syncval errors with DONT_CARE for unused attachments DONT_CARE is a write operation for synchronization purposes. ANGLE doesn't synchronize depth/stencil attachments that are not written to, as it uses the read-only layout. This change makes sure LOAD/STORE_OP_NONE are used instead of DONT_CARE for attachments that are not used, even if they don't have defined contents. This allows ANGLE to continue to not do additional synchronization. Bug: angleproject:5371 Bug: angleproject:5962 Bug: angleproject:6411 Bug: angleproject:6584 Change-Id: I539379aa34f6655f00e798e8c4a5c57f40f7a12d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3612182 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Charlie Lao 2a6e123b 2022-04-27T15:27:46 Vulkan: Move pruneOrphanedBufferBlocks to last RendererVk::cleanupGarbage() should call pruneOrphanedBufferBlocks() after clean up mSuballocationGarbage, so that we will be able to find the orphaned buffer block being empty if mSuballocationGarbage actually made it empty. Bug: chromium:1318110 Change-Id: I0cc6e45c192f406e7bbb15c7427d30e06208dd06 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3611648 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 266111a5 2022-04-22T21:52:19 Vulkan: Fix SemaphoreCount best practice warning Bug: angleproject:7231 Change-Id: Ifd02084887aca44aade96474a45f3060b276226e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3603701 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: 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>
Mohan Maiya 02b96848 2022-04-21T16:32:31 Vulkan: Add support for GL_QCOM_shading_rate Layer GL_QCOM_shading_rate over VK_KHR_fragment_shading_rate Test: ShadingRateQcomTest* Bug: angleproject:7172 Change-Id: I3f040dbfad3906facd4349937fed2ce9a464b824 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3599874 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Ian Elliott 64fa5eda 2022-04-22T09:59:57 Suppress VVL UNASSIGNED-BestPractices-SemaphoreCount Bug: angleproject:7231 Change-Id: I2072e5ba5937342452889c370bab4da094cde2f3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3600153 Auto-Submit: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Ian Elliott <ianelliott@google.com>
Charlie Lao 3b38b379 2022-04-20T10:44:24 Vulkan: Add feature avoid HOST_VISIBLE and DEVICE_LOCAL combination Discrete GPUs device local memory usually is not CPU accessible. This adds a feature flag to control that. Fixed bug in BufferVk that when mapRangeImpl is called from angle internal, unmapImpl was using front end mapping parameters that is incorrect. We have to cache the mapping parameters in the backend to hangle the mapRangeImpl/unmapImpl calls from internal. Fixed the test bug in ComputeShaderTest.BufferImageBufferMapWrite that we are calling glMapBufferRange with GL_MAP_READ_BIT but are actually writing to the map pointer. This should result in undefined behavior per spec. Fixed the test bug in GLSLTest.* that VerifyBuffer calls glMapBufferRange, but was giving incorrect length which result in data only been partially copied. This bug was hidden due to previously all buffers are CPU accessible and there is no copy needed. Fixed the test bug in ReadPixelsPBOTest.* and ReadPixelsPBONVTest.* that calls glMapBufferRangeEXT, but was giving incorrect length which result in data only been partially copied. This bug was hidden due to previously all buffers are CPU accessible and there is no copy needed. Added new skipped syncval messages. Because this CL triggers a copyToBuffer call for some of the buffers and that changes the syncval message signature for the same reasons (i.e, feedback loop or synval does not know the exact range of buffer been used for vertex buffers etc). Bug: angleproject:7047 Change-Id: I28c96ae0f23db8e5b51af8259e5b97e12e8b91f2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3597711 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Alexis Hetu dc1b7029 2022-04-20T15:41:40 Disable MSAN in the Vulkan loader When trying to reproduce MSAN errors locally, a number of MSAN errors pop up inside the Vulkan loader. This CL disables MSAN checks around function calls which end up inside the Vulkan loader, which similarly had been done for LSAN before, and allows local MSAN builds to reach actual MSAN errors inside SwANGLE. Bug: chromium:1313907 Change-Id: I8c0b841f03ce57cecb01e34b4f6edab398d2924e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3598011 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexis Hétu <sugoi@chromium.org>
Shahbaz Youssefi fcec6904 2022-04-13T14:18:06 Generate feature variable names from display names The json file now only contains the feature display name. The variable name is automaticaly derived. For consistence with Chromium and other Chromium-based projects, the display name is now always snake_case, and that's what's specified in the json files. This also makes camelCase variable name generation trivial (as opposed to the other way around). Feature overrides now accept both snake_case and camelCase names to ensure compatibility with existing scripts. This is done by removing _ and comparing override names with feature names in lower case. Bug: angleproject:6435 Change-Id: I0b6ed2bbf5c312bc4f4be7b3c7d55dbaca2a9886 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3584630 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 5014ce66 2022-04-18T18:05:20 Vulkan: Add orphaned list for non-empty BufferBlocks. In the fix for chromium:1299211, we added a new pool in the RendererVk and pick which pool to use at the getDefaultBufferPool() call. This CL fixes the original problem differently. In this CL we still uses the ShareGroup's pool. When display global texture is enabled, we orphan the non-empty buffer blocks into renderer and check and destroyed from garbage collection code. This way we still only deal with one buffer pool and all logic is mostly in context destroy code path, which I believe is a better solution. Bug: b/223428306 Change-Id: Ib465a11f7e3656df09cc891416ff57f086a8184b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3573390 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Lubosz Sarnecki 03b3bc3f 2022-04-08T13:36:50 Tests: Add Special Forces Group 2 trace. Ignore a SYNC-HAZARD-WRITE_AFTER_READ VVL error in RendererVk. Add GL_EXT_texture_buffer prerequisite. Test: angle_perftests --gtest_filter="*special_forces_group_2*" Bug: angleproject:5592 Change-Id: I63350a0bdbdffbc6951fd650753d900b5ff0bade Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3578764 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi d2fd28ca 2022-04-07T01:38:35 Vulkan: Relax advanced blend on VK extension requirement The GL spec actually requires that advanced blend be used on color output 0, so the check for advancedBlendMaxColorAttachments >= 8 was actually unnecessary. Bug: angleproject:3586 Change-Id: I32ce2a5912390d1a9a5d742ef0ca7cacc636e064 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3575739 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>
Shahbaz Youssefi 8074061d 2022-04-09T01:03:53 Remove feature override platform methods Instead, the tests now use the enable() functions to override the feature at platform level. This fixes the forceFallbackFormat feature mistakenly not having been tested. Bug: angleproject:6435 Change-Id: I605e4133407282bd52232887b595af0d2c13575d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3577369 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi eeb39653 2022-04-08T16:09:48 Autogenerate features Features are now specified in a json file and autogenerated. This is in preparation for more autogeneration to support feature override in tests. This change doesn't yet fix the issues in anglebug.com/6435 and should be a no-op. Bug: angleproject:6435 Change-Id: Icdb63a94dc37b5fef0a356e0fc0b49937e083c8a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3579941 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop 8b84cf15 2022-03-30T13:42:38 Tests: Add GFXBench Car Chase trace Test: angle_perftests --gtest_filter="*car_chase*" Bug: angleproject:7125 Bug: angleproject:7173 Change-Id: I07069d46351718743e545fc056f41de2b6fe3820 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3561484 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Charlie Lao 8f904363 2022-03-31T12:30:19 Vulkan: Move memory allocation initialization code into function No functional change expected. This CL wraps all initialization code for VMA allocator and memory suballocation memoryType and alignment calculation into its own function. Bug: b/223428306 Change-Id: Id630bbae035912ad41c51c2bb1cd02c2e438b442 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3563506 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao fe28a429 2022-03-30T15:34:49 Vulkan: Create buffer for vertex array if robust enabled If robust access is enabled (i.e., chrome), we want to ensure vulkan driver never access beyond that OpenGL buffer boundary. But with suballocation from BufferPool, we are using the same VkBuffer for all suballocations from the same BufferBlock. this combined with the fact that there is no size information in the vkCmdBindVertexBuffers, it means vulkan driver can not properly ensure vertex access not go beyond the subrange. It can only guarantee not access beyond the entire VkBuffer size. This CL creates a dedicated vkBuffer object and bind it to the suballocation of the vkDeviceMemory so that vulkan driver will see the exact range of the subrange instead of entire buffer. Since we may allocated more memory than actual requested size and the extra paddings are not zero filled , user size is used to create this vkBuffer. This is only enabled when robust access is enabled. This CL also ported webgl conformance test out-of-bounds-index-buffers.html and out-of-bounds-array-buffers.html to end2end test. Bug: chromium:1310038 Change-Id: I3499ae600028149b1039082e5011232b3e4e5e80 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3553940 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 36e142c1 2022-03-25T12:10:17 Vulkan: Fix deadlock in device loss When the device is lost, the commands queue is cleaned up. This shouldn't be done immediately if the device loss is generated from the command queue itself (due to mutual exclusion requirements). For example, CommandQueue::checkCompletedCommands() loops over mInFlightCommands, whose body contains ANGLE_VK_TRY. On device loss, that macro invokes CommandQueue::handleDeviceLost which clears mInFlightCommands. In this change, handleDeviceLost() defers device loss handling if the mutex is already taken. A new class is added, ScopedCommandQueueLock, that handles device loss at the end of the scope (i.e. when the command queue operation is finished) by calling handleDeviceLostNoLock() before releasing the lock. Bug: chromium:1304907 Bug: angleproject:7129 Change-Id: Ifb67cfdad9595cec51a6a58b69f629aede489725 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3552088 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Peng Huang <penghuang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 36a051d8 2022-03-28T22:53:38 Vulkan: Move mid-RP color clear to loadOp if content undefined Instead of using vkCmdClearAttachments, if the color attachment has not been written to, modify the loadOp of the currently open renderpass to CLEAR. This is an adaptation of commit cfe5a1735a934cc83133bb6c69d19aa27278a270 The difference with that commit is that, with the prior changes that added tracking of color attachment access in the render pass, this change is greatly simplified by being able to immediately know if clear can be moved to the beginning of the render pass. Bug: angleproject:5048 Change-Id: I72b3613ad08ff869b71aced7e1f4e9be916d7b49 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3557815 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 16220730 2022-03-30T12:22:57 Vulkan: Enable framebuffer fetch on SwiftShader To roll into Chromium, this needs a rebaseline. Two oopr-canvas2D tests show a minor diff with this extension enabled. Bug: angleproject:6947 Change-Id: I19c285ec544fef3622cce805322093ccffbcb728 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3561280 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 657738e0 2022-03-29T19:27:34 Vulkan: Remove suppression of fixed VVL errors This partially reverts commit 91667dcafacc6d2bec545b776547e8583393a3f9. Bug: chromium:1310536 Change-Id: Ifeca55466f74b080274eb7762edce17bcace0aab Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3557816 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
angle-autoroll 91667dca 2022-03-28T18:56:11 Roll vulkan-deps from 9fd63df2bc48 to 737665b8eab1 (13 revisions) https://chromium.googlesource.com/vulkan-deps.git/+log/9fd63df2bc48..737665b8eab1 Changed dependencies: * glslang: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang.git/+log/f1d286fcc2..abbe466451 * spirv-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git/+log/48c8363f0a..bd325d2984 * vulkan-loader: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader.git/+log/ea503f36e6..b383c5131e * vulkan-validation-layers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/26f222cf8b..4bf3f07497 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 syoussefi@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: chromium:1310536 Change-Id: Id57e6986082a6a7167b7217c3681d284d718086b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3556087 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Yuxin Hu cdd97fb8 2022-03-24T17:41:30 Reland "Vulkan: Fix invalid access with display texture share group." This is a reland of 1099b5ef2279cfe1988a39c8e011aada59c650f1. Original change's description: > Vulkan: Fix invalid access with display texture share group. > Create bufferpool that owns by RendererVk. > If we are using EGL_ANGLE_display_texture_share_group > extension, use the bufferpool owned RendererVk, > otherwise, use the bufferpool owned by EGL::ShareGroup. > The bufferpool lifetime will remain consistent with > texture lifetime. > Bug: chromium:1299211 > Change-Id: Ie4e87cea1dfd20dabab24e2afed6ddd92e469888 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3531155 > Reviewed-by: Charlie Lao <cclao@google.com> > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Commit-Queue: Geoff Lang <geofflang@chromium.org> Bug: chromium:1299211 Change-Id: I4b8f5bcb30297f2c5f24e02404fd96011f9d843b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3550038 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shrek Shao 73ec28af 2022-03-23T21:13:45 Revert "Vulkan: Fix invalid access with display texture share group." This reverts commit 1099b5ef2279cfe1988a39c8e011aada59c650f1. Reason for revert: suspect culprit of 1309304 Original change's description: > Vulkan: Fix invalid access with display texture share group. > > Create bufferpool that owns by RendererVk. > If we are using EGL_ANGLE_display_texture_share_group > extension, use the bufferpool owned RendererVk, > otherwise, use the bufferpool owned by EGL::ShareGroup. > The bufferpool lifetime will remain consistent with > texture lifetime. > > Bug: chromium:1299211 > Change-Id: Ie4e87cea1dfd20dabab24e2afed6ddd92e469888 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3531155 > Reviewed-by: Charlie Lao <cclao@google.com> > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Commit-Queue: Geoff Lang <geofflang@chromium.org> Bug: chromium:1299211, 1309304 Change-Id: Ibdc119ef6bb52352858114d72a0f1c0edcd4da5e No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3546288 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Reviewed-by: Shrek Shao <shrekshao@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Yuxin Hu 1099b5ef 2022-03-17T17:20:44 Vulkan: Fix invalid access with display texture share group. Create bufferpool that owns by RendererVk. If we are using EGL_ANGLE_display_texture_share_group extension, use the bufferpool owned RendererVk, otherwise, use the bufferpool owned by EGL::ShareGroup. The bufferpool lifetime will remain consistent with texture lifetime. Bug: chromium:1299211 Change-Id: Ie4e87cea1dfd20dabab24e2afed6ddd92e469888 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3531155 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 20e7bbb7 2022-03-18T17:03:18 Vulkan: Fix invalidate of attachments with emulated format Some image formats may be emulated such that the emulated format has more channels than the original. ANGLE clears the image once so that these extra channels contain valid values, and carefully ensures they are never modified. For swapchain images with such formats, as they are automatically invalidated at the end of the frame, a workaroud was added to make sure they are re-cleared in the beginning of the next frame. This however doesn't fix the issue of glInvalidateFramebuffer resulting in the contents of attachments with such formats to be discarded (even if the following render pass clears it, the contents are invalid in between). This change instead makes sure invalidate of images with emulated formats that have extra channels are handled appropriately: - On IMR hardware, the invalidate is dropped altogether as it provides little to no benefit. - On TBR hardware, a clear is automatically staged on the invalidated image. The latter replaces the workaround that was added to make the following render pass use loadOp=CLEAR, by adding a clear that's respected regardless of what the future usage is. This change also paves the way for a future change where the invalidate of color attachments is tracked in render passes similarly to how depth/stencil currently is. With this change, the image is no longer in an inconsistent state where its contents are considered invalid, even though some channels are meant to remain valid. Bug: angleproject:6860 Change-Id: Iec5b4854dfbe3a0bf93cd5aa82c19fe116065744 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3536389 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
angle-autoroll 093d4287 2022-03-21T12:57:10 Roll vulkan-deps from 51988dcdccbf to 61b4f5b95321 (21 revisions) https://chromium.googlesource.com/vulkan-deps.git/+log/51988dcdccbf..61b4f5b95321 Changed dependencies: * vulkan-headers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers.git/+log/384881cc90..32c07c0c53 * vulkan-validation-layers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/6c8f1627a3..af4bf61013 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 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:7105 Change-Id: Id26d7dfdd9745f549ea08f584e4dd9dc88b7bc90 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3539789 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill a55526a5 2022-03-17T11:11:37 Vulkan: Ignore VUID-vkCmdDraw-None-06538. Suspected as being incompatible API usage in ANGLE. Bug: angleproject:7105 Change-Id: I8c806b1ae090c5bedd762c1539a228c31a553858 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3533140 Auto-Submit: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 22f177eb 2022-03-17T16:58:37 Vulkan: Expose advanced blend for non-coherent devices as well Reliance on coherent behavior was accidental. Bug: angleproject:3586 Change-Id: I86d055cf640368b57256910764c44596b23ccdd8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3535299 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 98bb4f32 2022-02-23T16:51:32 Vulkan: Implement advanced blend through extension This change exposes GL_KHR_blend_equation_advanced if VK_EXT_blend_operation_advanced is supported. No emulation is yet implemented. Bug: angleproject:3586 Change-Id: Ie7a442c22e028e3aa45ccef52db320e205664d49 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3487951 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Brandon Schade 1760ce37 2022-03-03T17:29:12 Add usage of Spirv through glslang build flag Add new build flag angle_use_spirv_gen_through_glslang. If set, angle_enable_spirv_gen_through_glslang is enabled and the generateSPIRVThroughGlslang feature is also enabled. Bug: angleproject:6210 Change-Id: I8f4f71c2d01314a36b15fae795caa01a1ffa7fbc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3502529 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Brandon Schade <b.schade@samsung.com>
Brandon Schade 2d12b321 2022-03-03T10:42:03 Remove limit on exposeNonConformantExtensionsAndVersions to expose 3.2 Fix an issue where using the feature exposeNonConformantExtensionsAndVersions would still be limited to version 3.1. Remove this restraint when the feature is enabled. Continue to limit version to 3.1 if either it is a WebGL context or Geometry and Tessellation shader support is not present. Bug: angleproject:3647 Change-Id: I17f46756c22d95b39f2fd9ecb2db7ce4de903a2a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3502173 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: mohan maiya <m.maiya@samsung.com> Commit-Queue: Brandon Schade <b.schade@samsung.com>
Jamie Madill ea70300b 2022-03-01T14:55:00 Fix base level changes not updating FBO completeness check. Bug: chromium:1299264 Change-Id: I0881a4916c3eeb9ee023d28d207795899417d530 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3498282 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Auto-Submit: Jamie Madill <jmadill@chromium.org>
Hailin Zhang 36132a26 2022-02-24T10:52:31 Reland "add host cached bit for staging buffer" This is a reland of commit e1af34a6f4fbcdc9bf1da5498f87b6d2aa8b526b Original change's description: > add host cached bit for staging buffer > > bug: b/219974369 > Change-Id: Ia31109839af9cfa5b862b72152f7189c42e48e53 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3488773 > Reviewed-by: Charlie Lao <cclao@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Commit-Queue: Jamie Madill <jmadill@chromium.org> bug: b/219974369 Change-Id: If1b69490a9cbe0784972d85d1ceac8d598c68def Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3503997 Reviewed-by: Hailin Zhang <hailinzhang@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 36ce2646 2022-03-04T11:37:08 Vulkan: Align the size before calling into VMA's allocator The size we saved in BufferSuballocation object may used for vkFlushMappedMemory() call. This will ensure that we save the aligned size to avoid VVL error for unaligned size in that flush call. bug: b/219974369 Change-Id: Iccf3199f43cd346dab80083d5494fbaeee39948f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3504000 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Jamie Madill e14a20e3 2022-03-04T15:05:07 Revert "add host cached bit for staging buffer" This reverts commit e1af34a6f4fbcdc9bf1da5498f87b6d2aa8b526b. Reason for revert: Causes VVL error on Pixel 6: https://ci.chromium.org/ui/p/angle/builders/ci/android-arm64-exp-test/237/overview Original change's description: > add host cached bit for staging buffer > > bug: b/219974369 > Change-Id: Ia31109839af9cfa5b862b72152f7189c42e48e53 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3488773 > Reviewed-by: Charlie Lao <cclao@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Commit-Queue: Jamie Madill <jmadill@chromium.org> Change-Id: Ie91fe94471f48ac880c6470c69ac5e7746c603c9 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3503690 Auto-Submit: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Charlie Lao b72718d2 2022-02-22T16:18:45 Vulkan: Fix the data race for mUse from two threads A data race of mUse object between two threads can occur with the following sequences: 1) You use the buffer in the context, it adds into mResourceUseList 2) You release the buffer. Now it goes into mGarbageList, even though it is still in the mResourceUseList. Now this mUse object has references from two lists, the mGarbageList and mResourceUseList, and they do not use the same mutex lock. This means the race could happen and corrupt the mUse data. The same thing could happen with ImageHelper object as well. This quick fix also grabs mGrabageMutex while processing mResourceUseList. This CL creates a new garbage list to hold garbage that has not been submitted to vulkan. And this list will only accessed from submission thread and with mGarbageMutex lock held. The advantage of this is that mSharedGarbage will only have objects that already submitted, which means it is in FIFO order so that we can break out the loop as soon as we see an uncompleted garbage. This bug was exposed by MultithreadingTest.MultiContextClear/ES3_Vulkan_SwiftShader on linux-tsan-test Bug: angleproject:7045 Change-Id: I264c970579aaa53373a61ff067fa0e21eb410ae6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3482158 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Hailin Zhang e1af34a6 2022-02-24T10:52:31 add host cached bit for staging buffer bug: b/219974369 Change-Id: Ia31109839af9cfa5b862b72152f7189c42e48e53 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3488773 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Cody Northrop 1fd544a4 2022-02-25T12:22:01 Vulkan: Disable shader validation cache on Android With local testing and code analysis, we can see that shader validation caching doesn't work on Android. Turning it off entirely results in a decent speedup: Pixel 6 Pro Before: ~10000 ms Pixel 6 Pro After: ~7000 ms Test: angle_end2end_tests --gtest_filter="*GLSLTest*Fragment*ES3_Vulkan" Bug: angleproject:7050 Change-Id: I8107c366b5e2dca7131626d29262d64ad9666e0c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3491461 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Jeff Vigil 51967b4f 2022-02-11T13:01:54 Vulkan: Fix enabling external fences and semaphores These capabilities are Instance extensions need fixed to enable Native fences for Android Bug: angleproject:7009 Change-Id: I9f07dc88cabd52712ebde28ba938662d7773c8b5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3457743 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Ian Elliott 5e87ae0a 2022-03-01T12:41:00 Use VK_ANDROID_surfaceless_query for EGLConfig formats That extension allows DisplayVkAndroid::generateConfigs() to query the swapchain formats (but not yet colorspaces) before ANGLE is given any VkSurfaceKHR. This is used for creating EGLConfig's with GL_RGB10_A2 and GL_RGBA16F. Bug: b/203826952 Change-Id: I55302c98641fbce93f7af428087430763676bdb4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3492482 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Trevor David Black <vantablack@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Shahbaz Youssefi b80635ca 2022-02-22T15:50:58 Revert "Vulkan: Suppress VVL message about allocation exceeding heap size" This reverts commit 158d47831e77edf16721f631c1c4b45149182f4d. Reason for revert: No longer necessary anglebug.com/6444#c20 Original change's description: > Vulkan: Suppress VVL message about allocation exceeding heap size > > VMA does not check the result of vkGetBufferMemoryRequirements against > the heap size before attempting to make an allocation, which leads to a > validation error. > > The error is benign for ANGLE as the subsequent Vulkan allocation will > fail, leading to an OOM generated by Vulkan isntead of ANGLE to the same > effect as far as the application is concerned. > > Bug: angleproject:6444 > Change-Id: Ia474629971d6835f727b3fb43313a6003e3c939a > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3387088 > Reviewed-by: Charlie Lao <cclao@google.com> > Reviewed-by: Nicolas Capens <nicolascapens@google.com> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:6444 Change-Id: I6b153f6002b35c057fed11d287e0c8211f4ada66 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3480738 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Nicolas Capens <nicolascapens@google.com> Commit-Queue: Nicolas Capens <nicolascapens@google.com>
Mohan Maiya 671fcf73 2022-02-16T14:22:38 Vulkan: Add a feature to retain SPIR-V debug info Add a feature to retain debug info in SPIR-V blob. It is enabled when validation layers are enabled. Bug: angleproject:5901 Change-Id: Iccdff31ae0f12fc95d59d20e43e94b6f3d1ae00e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2850388 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Sean Risser 3adace15 2022-01-10T22:53:19 Don't expose detailed driver version info to webGL WebGL's GL_RENDERER string now only includes basic version information on all backends. This is controlled through a bool passed through getBackendVersionString. Bug: angleproject:6777 Change-Id: Ie4e3d91d22c96f175a8139fac1c66e985ed9e1b7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3380263 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Sean Risser <srisser@google.com>
Mohan Maiya 19f40531 2022-02-11T11:17:22 Vulkan: Enable subgroup feature in GenerateMipmap.comp Enable subgroup feature to optimize shaders used for generating mipmaps. Remove definition of SPD_NO_WAVE_OPERATIONS to enable subgroups. Regenerate all internal shaders with target as vulkan 1.1 to enable subgroup feature. Bug: angleproject:7006 Change-Id: I36f50f3d27517fedb52e3028a8f6288347b1bfa0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3453288 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi d285d6a7 2021-11-23T23:12:00 Vulkan: Use VK_EXT_depth_clip_control Bug: angleproject:6679 Change-Id: Iea3b7a2d8db630dcea19836732de8f9e0a7a568f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3298356 Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 419bca3f 2022-01-19T18:22:56 Vulkan: Use Vulkan API directly for BufferPool's buffer allocation There are two motivations in this CL. 1) There are two layers of suballocator right now. BufferPool provides first suballocation. It tries to allocate from one of the buffers in the pool. If that failed, it try to create a new BufferBlock (i.e, a VkBuffer). Right now that calls into VMA which creates another pool to allocate a buffer. We really only need one layer of suballocation. And 2) Because we uses VMA to do actual VkBuffer allocation, we have to use Allocator object. But VMA can not handle external buffers, so we end up having a BufferMemory class just to handle two different cases. This CL attempts to clean up this by let ANGLE calling into vulkan driver directly for the actual buffer allocation, just like we did for VkImages. By doing so, we able to remove BufferHelper::mMemory data member as well as BufferMemory class all together. External memory is now treated exactly the same at BufferHelper. Bug: b/205337962 Change-Id: I7c183ab0fd7d9aceb6cf416b0214c300798bc010 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3402740 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 71d06198 2022-02-07T11:16:41 Vulkan: Fix vkCmdClearAttachments vs multiview Bug: angleproject:6262 Change-Id: I5a24693bb1b35201213c2e3fa25f7864609357b3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3442255 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 1b9774f5 2022-01-26T13:37:03 Vulkan: Force submit updates to immutable textures Submit immutable texture updates recorded in outside renderpass commands when the following conditions are met - 1. "forceSubmitImmutableTextureUpdates" feature is enabled 2. The texture is immutable This works around a problem that manifests in some applications that do not perform appropriate synchronization of shared contexts. Bug: angleproject:6929 Test: EGLContextSharingTestNoSyncTextureUploads.* Change-Id: I2a237046e2cc53650eb8dc07e3697f7481df9b02 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3418138 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi d9fcebb8 2022-02-07T14:11:58 Vulkan: Make framebuffer fetch syncval errors more specific The errors are very generic, so now they are only suppressed if framebuffer fetch is used by the application. This change partially relands 2eeb87488. Bug: angleproject:6951 Change-Id: I55f444d19360d3066f1d4b0959d25e676dbb1a38 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3444341 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Ian Elliott 9208dcc6 2022-02-07T18:23:12 Revert "Vulkan: Enable framebuffer fetch on SwiftShader" This reverts commit 2eeb8748867c529474200d302f21f20ab461b9b4. Reason for revert: Breaks tests for ANGLE-to-Chromium autoroller Original change's description: > Vulkan: Enable framebuffer fetch on SwiftShader > > Bug: angleproject:6951 > Change-Id: I10eeb58be9e8639c0519fc47f327a0894155b755 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3437409 > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:6951 Change-Id: I35eaf2b7411d1bf055484bbb32f7e681286edd42 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3442370 Reviewed-by: Ian Elliott <ianelliott@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Ian Elliott <ianelliott@google.com>
Antonio Caggiano ac20272f 2022-01-19T17:13:50 Vulkan: Fix present region rectangles EGL rectangles are specified relative to the bottom-left of the surface, while Vulkan framebuffer space puts the origin on the top-left corner. Bug: angleproject:6933 Change-Id: Ia57eea8601ee724c0a82eb718d831de6b7566472 Reviewed-by: Constantine Shablya <constantine.shablya@collabora.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3423770 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 2eeb8748 2022-02-03T13:10:54 Vulkan: Enable framebuffer fetch on SwiftShader Bug: angleproject:6951 Change-Id: I10eeb58be9e8639c0519fc47f327a0894155b755 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3437409 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao bc3be5a8 2022-01-27T12:12:58 Vulkan: Add a dedicated suballocation garbage list Suballocations are the most common garbage objects in most usage cases. The current garbage collection code will construct a garbage object from suballocation and then construct a SharedGarbage object with a std::vector that holds only one element. And then it adds this SharedGarbage to the garbage list. This CL tries to avoid create std::vector with just one element and avoid the cost of switch statement for each garbage object by adding a new dedicated garbage list that only holds the suballocation garbages, which is the most common garbages in the system. With gardenscapes running offscreen with --minimum-gpu-work, it reduces CPU overhead from 2.55ms to 2.20ms on Pixel6. Bug: b/215768827 Change-Id: Ia2872442462917c0caadb263769a1cbf3dd7366f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3414356 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Yuly Novikov 508a8a02 2022-01-31T15:12:55 Remove old spellings for SYNC-HAZARD-WRITE_AFTER_READ skips Obsoleted by VVL roll crrev.com/c/3426000 Bug: chromium:1292106 Change-Id: I360dea6f97e75a25245597e96553aa86d655c340 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3428099 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill 2d3ce72d 2022-01-20T10:13:06 Refactor shared library load to avoid allocations. Fixes a leak of an angle::Library detected in the EGL loader. Bug: angleproject:6937 Change-Id: I623aa6172b98a35465e1d2641b92f67bdc5d24e7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3403060 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@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>
Yuly Novikov 55ef2b4f 2022-01-28T23:24:49 Update one more SYNC-HAZARD-WRITE_AFTER_READ skip vkCmdCopyImageToBuffer() was changed to vkCmdCopyImageToBuffer in https://github.com/KhronosGroup/Vulkan-ValidationLayers/pull/3705 Skip both variants for now, the old one to be removed after a VVL roll. Bug: chromium:1292106 Change-Id: I8c1a6be7bcf829c9a8b848c5ef2362462a965a11 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3424667 Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 168e0ae5 2022-01-27T16:50:00 Vulkan: Refactor descriptor pool code. This uses vk::Context to init DynamicDescriptorPool, and removes some accesses to ProgramExecutableVk member variables so the methods can more easily be moved into another class. The changes should have no effective behaviour difference. Note that the immutable sampler descriptor count is entirely set by the format of the immutable samplers. However we can't determine this count by looking at the descriptor set layout desc with the current implementation. Bug: angleproject:6776 Change-Id: I0a323d19fa3720b5afd8300401ed9c30b105c0ef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3424657 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov a994ea99 2022-01-28T17:52:16 Update SYNC-HAZARD-WRITE_AFTER_READ skip VK_PIPELINE_STAGE_2_NONE_KHR was renamed to VK_PIPELINE_STAGE_2_NONE in https://github.com/KhronosGroup/Vulkan-ValidationLayers/pull/3705 Skip both variants for now, KHR to be removed after a VVL roll. Bug: chromium:1292106 Change-Id: Ie8d095eccedc526880edf7d3601fa0aca23c1498 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3424665 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Jeff Vigil e03f1753 2022-01-06T09:48:12 EGL: mutable_render_buffer deferredFlush fix When in SINGLE_BUFFER mode, need to get around deferredFlush and call Swapbuffers to force update This must do status check for OUT_OF_DATE. Bug: angleproject:6878 Change-Id: I34b7381f6799879bf6f6d490aba02feffc5c3748 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3373739 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Brandon Schade <b.schade@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Lubosz Sarnecki 42c8b29d 2022-01-05T13:35:23 Tests: Add Dead By Daylight trace. Add GL_EXT_shader_framebuffer_fetch prerequisite. Ignore SYNC-HAZARD-READ_AFTER_WRITE validation error in RendererVk. Test: angle_perftests --gtest_filter="*dead_by_daylight*" Bug: angleproject:6870 Change-Id: I01f53ff8d26b704b75afe8c02ac12777b51fd5de Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3372793 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Charlie Lao a7970889 2022-01-24T11:50:27 Vulkan: Use queue instead of vector for mSharedGarbageList The garbage collector code is iterating the mSharedGarbageList from begin to end and if the garbage object is completed, we destroy it and erase it from the vector. This is done one by one. The problem with that is each erase call end up moving the remaining vector to ahead by one, and this process is repeated for each completed element. This is O(N^2) problem and really magnifies when you have many garbage objects. Since we only add garbage when it is GPU pending, so most of these garbages are in sort of fifo order anyway. This CL changes the garbage list from vector to queue so that erase becomes pop and this becomes a O(N) problem. This reduces CPU overhead as measured with minimize-gpu-work for gardenscapes from 10ms to 2ms due to suballocation generates lots of garbages. But this CL is a general improvement for the garbage collection performance. Bug: b/215768827 Change-Id: I002aadf75f958d8b79eb6281a2608597776e908d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3414354 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>