src/libANGLE/renderer/vulkan/RendererVk.cpp


Log

Author Commit Date CI Message
Yuxin Hu 497440cd 2023-09-07T15:39:19 Make egl surface uncurrent when being destroyed This is to workaround errors when app does below behaviors: 1) while there is a context still bound to the current rendering thread and the surface, call eglDestroySurface() 2) create a new surface eglCreateWindowSurface() 3) call eglMakeCurrent() with the surface created in step 2) 4) does work on the new surface The old surface won't be destroyed in step 1) because it was still bound by the context of the current rendering thread. When creating new surface on step 2), some hardware will return error code EGL_BAD_ALLOC, because the old egl surface is still associated with the native window. To workaround, when destroying surface, if the surface is still bound by the context of the current rendering thread, release the context and surface by passing EGL_NO_CONTEXT and EGL_NO_SURFACE to eglMakeCurrent(). The workaround is controlled by a frontend feature uncurrentEglSurfaceUponSurfaceDestroy. This feature is only enabled on vulkan and gl backends. Bug: b/292285899 Change-Id: I872d2e116ba6860f58d1176f011a5ef7c5a5af4e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4851255 Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Amirali Abdolrashidi e7418836 2023-08-16T14:25:52 Vulkan: Add context flushing as OOM fallback * As a new fallback for out-of-memory errors, if an allocation results in device OOM, the context is flushed and the allocation is retried. * Functions related to buffer/image allocations now return a VkResult value instead of angle::Result, which will be bubbled up to a higher level for safer handling. * The OOM is no longer handled at the level where the allocation happens, but is moved up to the context. * Added two functions to ContextVk for allocating memory for images and buffer suballocations, which also include the fallback options. * initBufferAllocation(): Uses BufferHelper::initSuballocation() * initImageAllocation(): Uses ImageHelper::initMemory() * Moved initNonZeroMemory() out of the following functions: * BufferHelper::initSuballocation() * Moved to ContextVk::initBufferAllocation(). * ImageHelper::initMemory() * Moved to ContextVk::initImageAllocation(). * Also moved to new function: ImageHelper::initMemoryAndNonZeroFillIfNeeded(). This function replaced the rest of initMemory() usages outside initImageAllocation(). * New macros for memory allocation * VK_RESULT_TRY() * If the output of the command inside it is not VK_SUCCESS, it will return with the error result from the command. * VK_RESULT_CHECK() * If the output of the command inside it is not VK_SUCCESS, it will return with the input error. * Added a test in which allocation would fail due to too much pending garbage without the fix on some platforms. The test ends once there has been a submission. * New suite: UniformBufferMemoryTest * Added a similar test for flushing texture-related pending garbage. * New suite: Texture2DMemoryTestES3 Bug: b/280304441 Change-Id: I60248ce39eae80b5a8ffe4723d8a1c5641087f23 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4787949 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi b185c3ea 2023-09-11T12:28:43 Vulkan: Add host-image-copy usage to images when optimal The change currently doesn't actually copy on host, but prepares the image for it. Bug: angleproject:8341 Change-Id: I4458712dca46ef9872020e158a3f902e94f5eb93 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4856146 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi e234c182 2023-09-08T16:19:29 Add features for VK_EXT_host_image_copy Bug: angleproject:8341 Change-Id: Id076e6c9e040f3c19a1eb221f6099ac11d4d091a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4852280 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov e691a4ed 2023-09-04T15:35:39 Delete obsolete VUID VUID-VkGraphicsPipelineCreateInfo-topology-08890 was renamed to VUID-VkGraphicsPipelineCreateInfo-topology-08773 Bug: angleproject:8237 Change-Id: Icb3f3f28664d0beac31f2541d90d5dbbada9a3b6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4840195 Auto-Submit: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
angle-autoroll 1192e5e8 2023-08-31T15:03:53 Manual roll vulkan-deps from a446c6320b6b to 988fe1c529b0 (28 revisions) Suppress new VUIDs: VUID-VkGraphicsPipelineCreateInfo-topology-08773 VUID-VkDescriptorImageInfo-imageView-07796 Manual roll requested by ynovikov@google.com https://chromium.googlesource.com/vulkan-deps.git/+log/a446c6320b6b..988fe1c529b0 Changed dependencies: * spirv-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git/+log/b6893ccdfb..9b923f7cc3 * vulkan-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools.git/+log/6087a58444..389110e460 * vulkan-validation-layers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/b2f5094203..70be16c58d 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:8318, angleproject:8237, angleproject:8334 Change-Id: I4b868b67b0c8158179fee61018933104c4ed55d3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4832731 Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Shahbaz Youssefi 571b4cdb 2023-08-14T16:55:28 Vulkan: Move pipeline/desc-set layout creation to link job The pipeline and desc-set layout caches are consequently made thread-safe. The reference counter on the layouts are also made atomic. With this change, practically all of the link in the Vulkan backend is moved to the link job. Bug: angleproject:8297 Change-Id: Iba694ece5fc5510d34cce2c34441ae08ca5bb646 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4774787 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi cb1c5ca4 2023-08-22T10:13:17 Manual roll vulkan-deps from aa121378c102 to 2cb515574109 (9 revisions) Includes an adjustment to syncval message format. https://chromium.googlesource.com/vulkan-deps.git/+log/aa121378c102..2cb515574109 Changed dependencies: * glslang: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang.git/+log/c5117b328a..db8719ae07 * spirv-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git/+log/bfc94f63a7..714966003d * vulkan-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools.git/+log/300d9bf6b3..b441f434a0 * vulkan-validation-layers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/d1ff40512a..ebab3bc86c 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,syoussefi@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: I94f05554452f1c8b97a1426fb4b61ac1a1fa4b1a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4802525 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com>
Amirali Abdolrashidi f11c972b 2023-08-04T15:06:39 Update requiredFlags use for VMA image allocations For the OOM fallbacks, we currently remove bits from the required bits when device memory allocation is no longer possible. In doing so, allocating on the device has become a strong preference rather than a requirement. Therefore, we change this method a bit in this CL. * Removed the device-local bit from the required flags when calling allocateAndBindMemory(). * preferredFlags is now used in lieu of requiredFlags initially within allocateAndBindMemory() to signal to the VMA to prioritize allocating on the device. If it fails, we use requiredFlags for the fallback. Bug: b/280304441 Change-Id: Id47a224cd74dacd3fb12d4fbfd815d8cefc016c4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4753758 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Steven Noonan ffe81dd3 2023-08-03T14:53:32 Vulkan: allow opt-in to MSRTT emulation via overrides The existing enableMultisampledRenderToTexture feature combines conditions for device feature support and the policy decision of whether to allow MSRTT emulation. This change splits it into two features, allowing application developers to control the policy condition for the emulation path without impacting the device capability checks. Bug: angleproject:8291 Change-Id: Ic1525c878906b10df777c582e44b931028aae928 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4749525 Auto-Submit: Steven Noonan <steven@uplinklabs.net> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan 833f7f69 2023-08-09T10:49:51 Vulkan: improve XFB feature dependency checks Some features need to account for the possible override of supportsTransformFeedbackExtension == false. Since we now frontload the overrides, we also can remove the explicit overrides for the dependent features in TransformFeedbackTest. Bug: angleproject:8291 Change-Id: I0ec54dc0fce440ef3e7bfe9987d0ea19fb9dafaa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4763096 Auto-Submit: Steven Noonan <steven@uplinklabs.net> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan f395f34b 2023-08-03T13:58:43 features: frontload feature overrides This allows us to have features that depend on the state of other features more reliably. For example, let's say you have two features: ANGLE_FEATURE_CONDITION(&mFeatures, allowX, (benefitsFromX || isSpecificHardware) && !isBadHardware); ANGLE_FEATURE_CONDITION(&mFeatures, supportsX, hardware.featureXSupported && mFeatures.allowX.enabled); Before this change, if you overrode allowX, the override would be applied too late for the supportsX test. This also helps with disabling dependent features via overrides. For example, if you disable "supportsRenderpass2", it will also disable features depending on it, such as "supportsDepthStencilResolve" and "supportsFragmentShadingRate". By frontloading the feature overrides, we can have cross-dependencies between "feature supported on this platform" and "allow this feature by policy". Bug: angleproject:8291 Change-Id: Id6da2c89428fa896d677fe8d5a41369277a21b31 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4749524 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Steven Noonan <steven@uplinklabs.net> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan fa3ecccb 2023-08-09T10:48:36 Vulkan: make fragment shading rate depend on renderpass2 The extension depends on renderpass2 and will raise a VVL failure if it's not available and enabled. Note that this doesn't yet work as intended if you only override supportsRenderpass2=false. A subsequent commit will fix this. Bug: angleproject:8291 Change-Id: I6843b342909fb9000ebdcea80e006670c865f858 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4763095 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Steven Noonan <steven@uplinklabs.net> Commit-Queue: Steven Noonan <steven@uplinklabs.net> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 4963febf 2023-08-02T16:52:52 Vulkan: Remove type indices with host-visible bit Currently, the memory type index for VMA image allocations are selected and returned by the API. However, it could potentially choose a type index with more flags than required or preferred, and ignore the index with exactly the flags we want. For example, it could pick a type index with the host-visible property flag, even if is unnecessary and a type index with a device-local flag would suffice. Using memoryTypeBits during the allocation allows us to filter the unwanted type indices out and use the other indices initially. * Added a new function to RendererVk.cpp to try to remove the memory type indices with the host-visible bit for VMA image allocations if they should be device-local. * GetMemoryTypeBitsExcludingHostVisible() * It also removes the indices with the protected bit if it is not required. * If the allocation is unsuccessful, the fallback resets the field for memoryTypeBits, allowing all available type indices to be used for the allocation. * Added memory type index to the pending allocation log during OOM. Bug: b/294085818 Change-Id: Icc1b218df075170a6baa7ec57c837ed59cd4fa96 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4743604 Reviewed-by: Kaiyi Li <kaiyili@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Cody Northrop 0abd6f54 2023-07-27T10:48:38 Vulkan: Enable dynamic state on working Android drivers Fixes are flowing out in different channels and versions, so add a bit of Pixel specific logic. Test: angle_trace_tests, deqp Bug: b/287318431, b/285196249, b/286224923, b/285124778 Change-Id: Ifc73e2a42d1d060a83a2fb83bcf8bb999f0990b5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4726502 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov 35605ca7 2023-07-28T14:01:32 VVL VUID-VkDescriptorImageInfo-imageView update https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+/b6c0e88b9fab7e9a93f8c5391ebb26de38d9b9bc the case that we hit as VUID-VkDescriptorImageInfo-imageView-06711 is now VUID-VkDescriptorImageInfo-descriptorType-06713 Bug: angleproject:7865 Change-Id: Ib2981b49890491719df5b474aad2a7b4e597793a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4727624 Commit-Queue: Solti Ho <solti@google.com> Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Solti Ho <solti@google.com> Auto-Submit: Roman Lavrov <romanl@google.com>
Roman Lavrov c319f34c 2023-07-28T12:30:18 Add VUID-vkCmdDraw-None VUID-vkCmdDrawIndexed-None VUIDs 08753 is now renamed to 09003 https://github.com/KhronosGroup/Vulkan-ValidationLayers/pull/6215 as it's being split into multiple cases Bug: angleproject:8242 Change-Id: I64aa75736fdb6ca9664da39f642e64f9f674b696 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4727623 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com> Auto-Submit: Roman Lavrov <romanl@google.com>
Yuxin Hu a0977311 2023-07-25T12:18:30 Disable the usage of VK_EXT_legacy_dithering Disable the usage of extension VK_EXT_legacy_dithering on ARM until the bugs in this extension is addressed. Bug: b/293136916 Bug: b/292282210 Change-Id: I1a548a2f6c44a78f8c66f706588a9985326217cf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4718306 Reviewed-by: Solti Ho <solti@google.com> Commit-Queue: Solti Ho <solti@google.com> Reviewed-by: Kaiyi Li <kaiyili@google.com>
Hailin zhang 4cae3b09 2023-06-02T23:52:15 Vulkan: disable pipline cache serialization In old NV drivers, Vulkan pipeline cache will only generate one single huge cache for one process shared by all graphics piplines in the same process, which can be huge. This is temp solution for nvidia driver cache issue. after driver version 520. nvidia fix the cache issue. this might affect second running performance. Bug: b/258207403 Change-Id: I3ea3e9196ad18fb1cec16c931eb744300d6cfdb9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4713207 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Phan Quang Minh 5eb30562 2023-07-17T07:23:03 Reland "Vulkan: Remove platform restriction of EGL_ANDROID_native_fence_sync" Instead of enabling it on all non-Mac platforms, this time enable it only on Linux-kernel based platforms (Linux, ChromeOS, Android). This should avoid interfering with Fuchsia. Original change description: > Remove platform restriction of EGL_ANDROID_native_fence_sync > extension except for Mac OS. > > Bug: angleproject:7834 > Change-Id: I116f44d8baca9cdcdd90013ca173b04461d06ae1 > Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4027707 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: mohan maiya <m.maiya@samsung.com> > Commit-Queue: mohan maiya <m.maiya@samsung.com> Bug: angleproject:7834 Change-Id: Ida89100e8c30c3a2df5a0a8d6d0c9b7e7ce3e412 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4687427 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov c0f2f71e 2023-06-27T16:00:09 Use VK_EXT_legacy_dithering when available instead of emulation Yields improvement in gpu power: http://b/284462263#comment45 Bug: b/284462263 Change-Id: I5bfd115557b6baac17c05639118feaebf19c5cd4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4652590 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
Yuly Novikov 35c077b1 2023-07-14T13:22:24 Remove obsolete VUID suppressions 02859 was renamed to 08608 and 06538 was renamed to 08753 in https://github.com/KhronosGroup/Vulkan-ValidationLayers/pull/6008/commits/0cc78b9c282aa3e97316e739b88641a5d45f9463 Bug: angleproject:8242, angleproject:8119, angleproject:7105 Change-Id: Icde11d7c5b598bfb617d899daa795d3e19c8a178 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4687419 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yiwei Zhang 79ebd10a 2023-07-13T23:23:27 Vulkan: disable explicitlyCastMediumpFloatTo16Bit for Venus Workaround for platforms shipping Venus until vk-gl-cts issue 4554 gets resolved. Bug: b/290425152 Test: CtsSkQPTestCases org.skia.skqp.SkQPRunner#gles_gradient_many_stops Change-Id: Ia05d905a9b56264164ed3325e4966dd2976b1fe9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4684548 Auto-Submit: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Phan Quang Minh 4cab5e94 2023-07-12T10:04:10 Vulkan: Enable timeline semaphores if supported by device This is needed for a similar change in Chromium to function with `--enable-features=VulkanFromANGLE`. Bug: angleproject:8253 Change-Id: I422964ea010c650439dd4797ee8ba7b533f26a87 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4675807 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 3cc3327c 2023-07-07T10:29:45 Vulkan: limit preferCPUForBufferSubData flag to mali job manager This feature flag was introduced with testing on pixel 6 pro with aliexpress trace. The GPU has a job manager does the scheduling and transfer workload was put in the same job queue as geometry work which causing unnecessary bubble in the pipeline. This problem does not exist on newer GPU architecture where it has a command stream front end that transfer has its own dedicated queue. As test result on pixel 7 devices indicates, this feature flag shows no difference on pixel 7with aliexpress trace, and has negative perf impact with gangstar_vegas trace. This CL limits the feature flag to ARM's job manager based GPU. This improves gangstar_vegas frame time from 8.4576ms to 4.6370ms on pixel 7 pro. Bug: b/289436017 Change-Id: I604fb1e26d0a99bcf8f4c2574ced360c31ac712d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4671326 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
angle-autoroll cb5cd76d 2023-07-03T15:54:58 Manual roll vulkan-deps from 2b2cba62bfea to e21365bc9170 (38 revisions) Manual roll requested by ynovikov@google.com Suppress new VUIDs: "VUID-vkCmdDrawIndexed-None-08608", "VUID-vkCmdDraw-None-08753", "VUID-vkCmdDrawIndexed-None-08753", https://chromium.googlesource.com/vulkan-deps.git/+log/2b2cba62bfea..e21365bc9170 Changed dependencies: * glslang: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang.git/+log/9575e33186..3ebb72cc74 * spirv-cross: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross.git/+log/2d3a152081..b8e742c91b * spirv-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git/+log/310a67020a..58459c2b1a * vulkan-headers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers.git/+log/b6a29e5ca8..ad5f8ee975 * vulkan-loader: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader.git/+log/a1d9d485ce..dce85674e2 * vulkan-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools.git/+log/247c806c93..2e5260d44c * vulkan-validation-layers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/926ffb1f41..4400858043 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,ianelliott@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:8242 Change-Id: I475146b418565e633043f6b57cb07baedcff02ba Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4662877 Commit-Queue: Ian Elliott <ianelliott@google.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Ian Elliott db3537aa 2023-07-03T15:56:42 Vulkan: Suppress VVL "VUID-vkCmdDraw-None-08608" Bug: angleproject:8242 Change-Id: Ia446cfc370ad6ade4967644416dee9e18aaaa0d3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4664612 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop 77c4b677 2023-06-28T08:23:23 Vulkan: Suppress PointSize VVL error Bug: angleproject:8237 Bug: angleproject:2796 Bug: b/288961771 Change-Id: I7e4b364225c61fd72091e9d84d45eb71a02a5597 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4653398 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Cody Northrop <cnorthrop@google.com>
Steven Noonan f150cf10 2023-06-23T02:56:09 Vulkan: minor pipeline cache chunk key hash bugfix The hash key was not correctly streaming the chunk index into the key string -- "chunkIndex" here is a uint8_t, which the ostream incorrectly identified as a character rather than byte. So the "std::hex" modifier didn't have any effect and chunkIndex 0 had a truncated key. Bug: angleproject:8231 Change-Id: Icb4977b658214979e08f66fcb98217259d4799ee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4639493 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan 113f847b 2023-06-26T12:07:52 centralize basic OS/platform detection functions We had multiple different places that defined these, and with varying naming schemes. Centralize them to be defined in platform_helpers.h. Also renaming the IsApple(uint32_t) functions to IsAppleGPU(uint32_t) to avoid ambiguous meaning: "IsApple" should mean "is Apple-vended OS" while "IsAppleGPU" should mean "is Apple GPU vendor ID". Bug: angleproject:8229 Change-Id: If4e3fc5ac1b5b8ad416663950a1b2ee912ccad99 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4647291 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Steven Noonan <steven@uplinklabs.net> Auto-Submit: Steven Noonan <steven@uplinklabs.net> Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan 42c3a9fe 2023-06-23T03:53:09 Vulkan: support creating context with MoltenVK on macOS The Vulkan loader somewhat recently introduced a requirement that clients must opt-in to using portability implementations of Vulkan (such as MoltenVK). Since there is no native Vulkan driver for macOS (and therefore no alternative), unconditionally enable the portability enumeration extension there. Bug: angleproject:8229 Change-Id: I24f0f24e25abd277855ed9ac4de370cfb47d3266 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4639495 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Steven Noonan <steven@uplinklabs.net> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Steven Noonan <steven@uplinklabs.net>
Amirali Abdolrashidi 5f9548c3 2023-05-19T11:51:04 Vulkan: Free the garbage memory before realloc Currently image allocations fall back to system memory in case of a device OOM. However, in some cases, it is also possible to gain some memory by freeing garbage memory from the device. This allows us to keep the allocation on the device memory. * Updated the image allocation fallback, so we will try cleaning the garbage memory through the renderer before retrying the allocation. * finishOneCommandBatchAndCleanup() in RendererVk, which will call a similar function in its CommandQueue. It will be called until there are no more in-flight submissions. * The existing finishOneCommandBatchAndCleanup() in CommandQueue has been renamed to finishOneCommandBatchAndCleanupImpl(). * Updated the flags used for VMA image allocations. If any device memory is freed after garbage cleanup to make enough space for the new allocation, it will take precedence over the system memory. * Added unit tests in which a new image allocation could happen on the device after freeing the garbage memory. * They use a 2D texture and a 2D texture array for garbage. Bug: b/280304441 Change-Id: Ia5e605e180833b44af8c77550ab1b0b8ba21724e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4547941 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Steven Noonan 131acc31 2023-06-23T04:12:09 Vulkan: fix blob caching of initial pipeline cache When creating a new pipeline cache and the blob cache doesn't have a matching one we can load, we unintentionally skipped serializing it to the blob cache until the pipeline cache state changed later on. Bug: angleproject:8230 Change-Id: If86d1bd169a63da9f9a394284a754bccb7d52e20 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4639496 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan ac4f52c4 2023-06-22T01:47:33 Vulkan: release all resources on RendererVk destroy The most important part of this is unloading the libvulkan handle. We open the handle in ::initialize but we were previously only unloading it in ::~RendererVk[1]. Since a DisplayVk (and RendererVk) are not destructed in between context creations, this meant that the libvulkan library handle reference count only increased, never decreased. [1] Which, incidentally, never gets invoked, ever. We create Display instances and they live forever in a static structure and we only ::initialize/::terminate them. Bug: angleproject:8225 Change-Id: I03da9b19f0c4ae3b5efacd07880aadb7ee77ebf5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4636882 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan ac263582 2023-06-19T12:26:44 Vulkan: add workaround for VK_EXT_full_screen_exclusive on AMD On outdated (but recent) AMD drivers, the Windows-only Vulkan extension VK_EXT_full_screen_exclusive appeared to be implicitly enabled and set to VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT mode. Even though ANGLE did not enable or interact with this extension at all, the driver was incorrectly returning VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT error codes on various swapchain operations when the full screen window focus was lost (i.e. alt-tab out and back in). Naturally, ANGLE was not expecting these error codes and did not know how to handle them. Depending on where the errors occurred, ANGLE might crash or retry creating the swapchain repeatedly. Treating the unexpected VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT error code as VK_ERROR_OUT_OF_DATE_KHR/VK_SUBOPTIMAL_KHR was not sufficient, because the driver would repeat the error on every swapchain operation, apparently expecting the error to be handled by a vkAcquireFullScreenExclusiveModeEXT call (even though that would make no sense, since the extension was not enabled). The incorrect driver behavior was reported to AMD and was fixed in recent driver releases. The earliest driver I've tested and know to be working is AMD's Adrenaline driver version 23.5.2 (VkPhysicalDeviceProperties calls this driverVersion 2.0.262/0x800106). The last known bad version was 0x8000e9. The simplest workaround on these older AMD graphics drivers is to explicitly enable the extension, but set it to VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT mode. On newer drivers we do not need to do anything with the extension and can ignore it. Bug: angleproject:8215 Change-Id: I7c58d47a0350f4b0bc1a77f200c1e2f72fcde8d8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4627279 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Steven Noonan 15156b1d 2023-06-19T11:58:20 Vulkan: disable graphics_pipeline_library on old NVIDIA drivers On drivers before R530, there are some transient visual glitches in rendering when using VK_EXT_graphics_pipeline_library. Basically you might see correct renders for a few frames, very incorrect renders for about 10-20 frames, and then it would render correctly from then on. This problem went away either at R530 or slightly after. This change sets the minimum version to R531, which is the first version I observed behaving correctly. Bug: angleproject:8218 Change-Id: I7af4f74c1469ecf2306dec0cab9062eff2ec5f2c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4627277 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan 2e0b369d 2023-06-19T12:05:24 Vulkan: copy drawIndirectFirstInstance from physical device features Not doing so results in VVL errors (you need the GPU-assisted validation preset enabled to see this error): [ VUID-VkDrawIndexedIndirectCommand-firstInstance-00554 ] The drawIndirectFirstInstance feature is not enabled, but the firstInstance member of the VkDrawIndexedIndirectCommand structure at index 1 is not zero The Vulkan spec states: If the drawIndirectFirstInstance feature is not enabled, firstInstance must be 0 Bug: angleproject:8220 Change-Id: Ia43036584b85e4a7d9c3fcaf793be94b965f708f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4627278 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan 152e0d16 2023-06-19T14:44:09 Vulkan: detect Apple GPU as being a tile-based renderer This helps systems running MoltenVK on Apple Silicon. Bug: angleproject:8221 Change-Id: I28ce9b3dc153fb420429641776767fb71734685a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4627276 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Yuxin Hu 5a5f21f4 2023-06-14T14:05:41 Disable supportsExtendedDynamicState on ARM There are multiple issues with dynamic states on ARM. Previously we have disabled individual dynamic state that had issues, but it turns out some dynamic states need to be enabled/disabled together for tests traces to work correctly. Disabling the supportsExtendedDynamicState until all the issues are addressed. Bug: b/287318431 Bug: b/285196249 Bug: b/286224923 Change-Id: If2f039b8392898e1e42b5da6b1277e82818a1b1a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4615995 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi ef582ba3 2023-06-13T00:22:34 Vulkan: Suppress vertex attribute divisor VUID ... to unblock the roller. Need to investigate if the failure is real. Bug: angleproject:8203 Change-Id: I958de60188a67e519d7d3b27c52b9ea260d36d80 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4610083 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Roman Lavrov <romanl@google.com>
Cody Northrop 4384e49c 2023-06-12T08:20:03 Vulkan: Disable some dynamic states on ARM Bug: b/286224923 Bug: b/285196249 Bug: b/285124778 Change-Id: Ia19a278581d6586a2e1efcc46987925dcc9ccd3e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4608501 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Yuxin Hu 6433724c 2023-06-02T23:51:30 Revert "Enable usePrimitiveRestartEnableDynamicState on ARM driver 43" This reverts commit 0ea8e55a6f0667c2bb189d95987833231cdb22b2. Reason for revert: http://b/285543622 Original change's description: > Enable usePrimitiveRestartEnableDynamicState on ARM driver 43 > > The dynamic state bug is fixed in ARM 43. > Venus has backported the driver fix, therefore we > also enable primitiveRestartEnable dynamic state > on venus. > > Bug: b/275210062 > Bug: b/282621541 > Change-Id: I5debd5146386f7e245610fb71c84e4a48b04e85b > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4581051 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Yuxin Hu <yuxinhu@google.com> > Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Bug: b/275210062 Bug: b/282621541 Change-Id: I529669f82fdb6ceb53e6740c9737cd061cbaf450 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4585317 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Yuxin Hu 0ea8e55a 2023-06-01T10:25:44 Enable usePrimitiveRestartEnableDynamicState on ARM driver 43 The dynamic state bug is fixed in ARM 43. Venus has backported the driver fix, therefore we also enable primitiveRestartEnable dynamic state on venus. Bug: b/275210062 Bug: b/282621541 Change-Id: I5debd5146386f7e245610fb71c84e4a48b04e85b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4581051 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
Amirali Abdolrashidi c80fc88a 2023-05-18T17:38:25 Vulkan: Add version to pipeline cache header * Added version as a field in the pipeline cache header. It is set by the value of kPipelineCacheVersion. * kPipelineCacheVersion must be incremented in case of any changes to the cache header or data structure. * This makes it easier to detect whether a change in the data is coming from the header/data change or from data corruption. If the version in the cache line matches kPipelineCacheVersion, some values in the header must meet certain conditions. Otherwise, it will result in a crash due to data corruption. Bug: b/246683126 Change-Id: Iaf1a2e1111cf47602dba947516ad8998d96dc943 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4546263 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi b0e9bbd7 2023-05-31T14:23:40 Vulkan: Split features for dynamic state When a driver bug with dynamic state is encountered, it is hard to debug which dynamic state exactly is causing an issue, due to the current granularity of disabling all entire state from an extension. With this change, every dynamic state gets its own ANGLE feature, and can be toggled as necessary. Disabling the supportsExtendedDynamicState* features implicitly disables all dependent features. Bug: b/285124778 Bug: b/275210062 Bug: fuchsia:107106 Bug: angleproject:5906 Change-Id: Ic291279872df2d0eb58618ff364ab118bdcc4a9f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4577553 Reviewed-by: Cody Northrop <cnorthrop@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Yuxin Hu dfb2bab0 2023-05-25T15:08:19 Apply Aliased Decorators To Image DataTypes Bug: b/274478912 Bug: b/266235549 Change-Id: I2cd272a1e7481a8803be63efe0be11c61560b23e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4568287 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov eaa53279 2023-05-30T14:37:03 Add mDitheringFeatures to mEnabledFeatures Missed in https://crrev.com/c/4567572 Also adds mSwapchainMaintenance1Features, which was missing in the same place, and I was using that as a reference in the CL above. Bug: b/284462263 Change-Id: I225cbd40d35eb09ea6220a6669574e19ce6cce83 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4574570 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov ff110417 2023-04-21T15:16:03 Vulkan: Emulate RGB32 uniform texel buffers when unsupported Applies to: GL_RGB32F, GL_RGB32I, GL_RGB32UI When VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT is specified for these formats by the Vulkan driver, behavior is the same as before. When it is not speficied: previously ANGLE wouldn't enable GL_EXT_texture_buffer unless exposeNonConformantExtensionsAndVersions was enabled; now ANGLE always enables it and does the RGB->RGBA conversion (GPU) under the hood and tracks buffer content updates using the paths added for tracking this for Vertex Arrays. Bug: b/278585075 Bug: angleproject:8128 Change-Id: I4605719bf3f51c5a10c1a35ecae767833dcd45d7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4456498 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov 16b9a16a 2023-05-26T14:45:15 Add supports_legacy_dithering feature VK_EXT_legacy_dithering => VkPhysicalDeviceLegacyDitheringFeaturesEXT.legacyDithering => supportsLegacyDithering Now getting enabled=true on Android master. Bug: b/284462263 Change-Id: Ibf43184c78d9847044b10413d2050b653e452c9b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4567572 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu 6f2128a5 2023-05-25T10:45:08 Disable stencil write mask workaround on latest ARM The bug has been fixed in ARM r43. Bug: b/279715714 Bug: angleproject:7556 Change-Id: I01f08459ab90fed4eb1d57194cea3805d7868c18 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4566953 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Alexey Knyazev 33e38862 2023-05-24T00:00:00 Vulkan: Limit clampFragDepth workaround to affected drivers Bug: angleproject:3970 Change-Id: I708591d86b8f2cb10d0cbdc7c14518fda45ac626 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4562134 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 934a25bc 2023-05-22T00:00:00 Vulkan: Implement EXT_depth_clamp Bug: angleproject:8047 Change-Id: I73244f5dcd6eeeb1889214ee3a611e4ecabbfe7e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4558744 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Amirali Abdolrashidi ac4649ef 2023-05-17T12:50:59 Vulkan: Update last CRC check for pipeline cache * In GetAndDecompressPipelineCacheVk(), a mismatch in the final CRC check before decompression is now fatal. If the expected CRC is non-zero, the cache header data will be logged before crashing. The only exception is when the expected CRC is 0, in which case there will only be a warning about the CRC mismatch. Bug: b/246683126 Change-Id: Ic2eb882bcc692b2a8f026cc90a0185a29d48f382 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4545957 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 7abc5248 2023-05-19T00:00:00 Vulkan: Enable VK_EXT_depth_clamp_zero_one Replaced the 'depth_clamping' workaround with the dedicated extension or explicit fragment depth clamping. Fixed: angleproject:3970 Bug: angleproject:8077 Change-Id: Ia7666fcb3e0e949922c13a3fd11b818cbc5a8e26 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4545084 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi b76166d0 2023-05-18T09:57:25 Vulkan: Separate image and sampler 2D view of 3D features The sampler feature is used to determine if EGL_KHR_gl_texture_3D_image can be exposed. The image feature is used to support base GLES 3.1 storage images. Bug: b/274478146 Change-Id: Ifb283633078ace7ee65f8aafe756d0a02b727bd7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4545005 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 80dd54f9 2023-05-17T22:16:59 Vulkan: Enable VK_EXT_image_2d_view_of_3d and set flag Based on a change by Yiwei Zhang <zzyiwei@chromium.org> Enabling the extension was missed from https://chromium-review.googlesource.com/c/angle/angle/+/3648586, and some implementations do rely on the feature enablement (e.g. RADV). This also fixes the VVL violations on satisfied implementations. Additionally, the VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT flag is always set on 3D images when this extension is supported; it is needed for both sampled and storage images, not just storage images. Bug: b/274478146 Change-Id: Ibc210275e2d39ac0c54d1ae4c2451a5402360972 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4544762 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Amirali Abdolrashidi cda716b3 2023-05-12T15:43:35 Expand numChunks to 16 bits in cache header On some devices, the number of chunks for the pipeline cache header might exceed the 8-bit limit. * numChunks and chunkIndex are expanded to 16 bits. * Padding added for the alignment of CacheDataHeader. * Updated the assert checks for numChunks and chunkIndex. Bug: b/246683126 Change-Id: I40a4224e845dc5bc6e415ec5f15b16f60f7923af Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4528541 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 8539177c 2023-05-12T15:27:03 Vulkan: Change pipeline cache header into class Currently the pipeline cache header is represented by a single value of type uint64_t. This prevents us from expanding the header if needed, for example if there is a need to increase the size of any of the data already included, such as numChunks, or add new data to the header. * Added the class CacheDataHeader to RendererVk.cpp, which is comprised of various elements of fixed size. * Replaced the uint64_t with CacheDataHeader. memcpy() is used for data transfer. * The order of the values is based on LSB, similar to the order in the original uint64_t. * Removed kBlobHeaderSize, replaced with sizeof(CacheDataHeader). * In GetAndDecompressPipelineCacheVk(), replaced the assert for chunk index 0 with a warning regarding unexpected values and the function returning without success. The assert was removed since in the case of expanding the chunk index beyond 8 bits, a non-zero value could be decoded. * numChunks and uncompressed data size are also checked to make sure they are non-zero before continuing the decompression. Otherwise, the function would return with no success. Bug: b/246683126 Change-Id: I4caaaef28c3e9ab2a7ca22f89962c11705577be5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4528540 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Amirali Abdolrashidi 6f959e07 2023-04-28T16:00:11 Vulkan: Add non-device memory option for VMA image * Updated the required flags for allocateAndBindMemory() to no longer include VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, though still preferred. This allows VMA to allocate from another memory type if the device is out of memory. * Added a debug message to indicate when allocated memory for VMA image does not have all the preferred property flags. * Also added a warning in the case of memory allocation fallback. * Added a perf counter to keep track of image allocation fallbacks from the device memory. * deviceMemoryImageAllocationFallbacks * Added a test to make sure that VMA images can still be allocated from other memory types even if device memory is unavailable. * VulkanImageTest.AllocateVMAImageWhenDeviceOOM Bug: b/280304441 Change-Id: Ic452c18ded25345cdb7e271442372b99aede045e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4493483 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Amirali Abdolrashidi 560ba1c6 2023-05-13T01:42:21 Revert "Suppress VUID-vkCmdDrawIndexed-None-0784x" This reverts commit aa6291aa43aa34ed5eb68c6b7faaba94ce08ef74. Reason for revert: The roller was successful. The issue seems to have been fixed. Original change's description: > Suppress VUID-vkCmdDrawIndexed-None-0784x > > * Suppressed the following VVLs > * VUID-vkCmdDrawIndexed-None-07840 > * VUID-vkCmdDrawIndexed-None-07841 > * VUID-vkCmdDrawIndexed-None-07843 > * VUID-vkCmdDrawIndexed-None-07844 > * VUID-vkCmdDrawIndexed-None-07845 > * VUID-vkCmdDrawIndexed-None-07847 > * VUID-vkCmdDrawIndexed-None-07848 > > Bug: angleproject:8159 > Change-Id: Id516d0a8e677b00b3f46a456d07386c5fd91d6dc > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4514440 > Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> > Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:8159 Change-Id: I00d45397cf72facfc60674563f95e81df80cc7c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4529339 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Amirali Abdolrashidi 17dbf435 2023-05-13T01:11:19 Revert "Suppress more of VUID-vkCmdDraw-None-0784x" This reverts commit c441206103b14f68fc5cfa9434f4058429a714dd. Reason for revert: The roller was successful. The issue seems to have been fixed. Original change's description: > Suppress more of VUID-vkCmdDraw-None-0784x > > * Suppressed the following VVLs > * VUID-vkCmdDrawIndexed-None-07840 > * VUID-vkCmdDrawIndexed-None-07841 > * VUID-vkCmdDrawIndexed-None-07843 > * VUID-vkCmdDrawIndexed-None-07847 > > Bug: angleproject:8151 > Bug: angleproject:8159 > Change-Id: I7fe36cfa34b8157af0be7f0c35779185a6b341aa > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4514442 > Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> > Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:8151 Bug: angleproject:8159 Change-Id: I41082df93a55c4eec46ad7d0d048a8159472a7d2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4528542 Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cody Northrop ad01f53c 2023-05-11T09:44:13 Vulkan: Add additional nullptr check in ShouldReportDebugMessage Some platforms are using the callback for non-VVL messages, and we just need an additional nullptr check for pMessageIdName when deciding whether to print it. Test: Trace tests on S23 with VVL enabled Bug: angleproject:8163 Change-Id: Id76903e01be859f6ae7a6d253ed32ae54cd682ec Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4522466 Auto-Submit: Cody Northrop <cnorthrop@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Hailin Zhang 8b9440b6 2023-05-01T15:31:01 Vulkan: add option to control pipeline cache data compression. Bug: b/258207403 Change-Id: I487b1cadbacfa2f7ee889a8f58278307a126a391 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4497248 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Hailin Zhang <hailinzhang@google.com>
Cody Northrop 3d455fe4 2023-05-03T15:35:47 Android: Galaxy S23 support This CL: * Adds detection of the device * Adds end2end test support * end2end test expectations for Vulkan backend * Works around driver issue with vkCmdSetLogicOpEXT Test: angle_end2end_tests, angle_trace_tests Bug: b/277717225, b/281128706 Bug: angleproject:8157 Change-Id: If6caa5b2ba0b9d7f94e1be0841bcff2ea1c34d89 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4509693 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi c4412061 2023-05-08T18:46:10 Suppress more of VUID-vkCmdDraw-None-0784x * Suppressed the following VVLs * VUID-vkCmdDrawIndexed-None-07840 * VUID-vkCmdDrawIndexed-None-07841 * VUID-vkCmdDrawIndexed-None-07843 * VUID-vkCmdDrawIndexed-None-07847 Bug: angleproject:8151 Bug: angleproject:8159 Change-Id: I7fe36cfa34b8157af0be7f0c35779185a6b341aa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4514442 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi aa6291aa 2023-05-08T15:49:15 Suppress VUID-vkCmdDrawIndexed-None-0784x * Suppressed the following VVLs * VUID-vkCmdDrawIndexed-None-07840 * VUID-vkCmdDrawIndexed-None-07841 * VUID-vkCmdDrawIndexed-None-07843 * VUID-vkCmdDrawIndexed-None-07844 * VUID-vkCmdDrawIndexed-None-07845 * VUID-vkCmdDrawIndexed-None-07847 * VUID-vkCmdDrawIndexed-None-07848 Bug: angleproject:8159 Change-Id: Id516d0a8e677b00b3f46a456d07386c5fd91d6dc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4514440 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 903d9fdf 2023-01-19T15:37:45 Vulkan: Implement ExternalFence for use in SyncHelperNativeFence `ExternalFence` allows concurrent usage in `CommandQueue` and `SyncHelperNativeFence` classes eliminating need of additional `vkQueueSubmit()` call. Waiting in `CommandQueue` on `QueueSerial` or `ResourceUse` will ensure corresponding state of the native FD (because `CommandQueue` will wait on the same FD instead of some other fence). After this change there will be only single `vkQueueSubmit()` call from the `SyncHelperNativeFence::initializeWithFd()` method. This CL and the follow-up is sufficient to fix the bugs below. Bug: angleproject:8115 Bug: angleproject:8117 Test: angle_end2end_tests --gtest_filter=EGLSyncTest.AndroidNativeFence_ExternalFenceWaitVVLBug* Change-Id: Ic562ecc71a95203454a1dc438589a13bcf3bff7f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4392879 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov e24f4519 2023-01-19T02:30:39 Vulkan: Add externalFence into submitCommands() Currently one-off fence in the `queueSubmitOneOff()` is used only in `SyncHelperNativeFence::initializeWithFd()` to submit external fence. Other `queueSubmitOneOff()` calls may use `QueueSerial` instead of a fence. Providing `fence` into `queueSubmitOneOff()` prevents tracking that submission with `QueueSerial`. Therefore using `mUse` to collecting `mFenceWithFd` as garbage will not work as intended. This CL removes `fence` from `queueSubmitOneOff()` and adds optional `externalFence` into `submitCommands()` instead. Providing `externalFence` will cause additional `vkQueueSubmit()` call: - first submission will submit everything as usual except using the `externalFence`. - second, will only submit internal `CommandQueue` fence for `QueueSerial` tracking. As the result of this CL, call to `initializeWithFd()` will always produce two (2) `vkQueueSubmit()` calls. Previously it may be one (1) or two (2) submissions. Future CL will reduce submission count to one (1). If add additional submission into `queueSubmitOneOff()` instead of `submitCommands()`, then maximum number of submissions will be three (3). Bug: angleproject:8117 Change-Id: I6f1ec12682aaab71bfc871e665fec2659df96b26 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4392877 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Amirali Abdolrashidi cd171d2e 2023-03-28T14:58:57 Vulkan: Enable async pipeline cache compression * Enabled the feature after adding more header data, including original cache size, chunk index, and CRC. Bug: b/246683126 Change-Id: Idef85f0a6f9e0072fcb800aedb6b720cc88c46b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4378720 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 2fec8ae8 2023-05-02T15:53:29 Vulkan: Handle inactive render pass in draw-based clear For simplicity, if a render pass is open for the current framebuffer but is not active, a new one is started in UtilsVk::clearFramebuffer. A future optimization could decide to reactive the render pass instead, but needs to check for whether that's possible (with a condition similar to what's found in ContextVk::handleDirtyGraphicsRenderPass) Bug: chromium:1440764 Change-Id: I727d4ecefc2bc0a1a9e399b8851c4cc830d20879 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4499765 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop 533cf9a4 2023-05-02T22:39:09 Vulkan: Suppress new VUID-vkCmdDraw-None VVL errors Test: angle_trace_tests --gtest_filter="*slingshot_test2*" Bug: angleproject:8151 Change-Id: Ifc26a57fe92b57c30f253f5bb491a1ac3932f2f1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4500928 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi a73e546c 2023-04-14T13:40:19 Vulkan: Add pending memory size for VMA images * Added implementation for vma::FindMemoryTypeIndexForImageInfo(). * Add pending memory allocation tracking for VMA images using the memory requirement from getMemoryRequirements() and the memory type index from the function above. Bug: b/218891184 Change-Id: I1c3d3a8f5f36eb57bd7a5a059aa3bf713b819831 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4428535 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Cody Northrop dcc37e31 2023-05-02T13:22:18 Vulkan: Restore stencil write mask workaround for ARM Still has issues on latest drivers. Test: angle_trace_tests --gtest_filter="*pokemon_go*" Bug: b/279715714 Bug: angleproject:7556 Change-Id: I4d46cdc2b86da374413f97e45858e18022e0cc7b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4499032 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev b052a5bf 2023-03-31T00:00:00 Vulkan: Implement polygon mode extensions * NV_polygon_mode * ANGLE_polygon_mode Bug: angleproject:1791 Bug: angleproject:8132 Change-Id: I2beffdad0c1569546020b78a9c6d9b8ea87c2100 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4498687 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 1fc399c6 2023-05-01T22:29:35 Vulkan: Adjust VVL suppression after VU consolidation Bug: angleproject:8119 Change-Id: I42746d399841591e78114cb26c2e377e255e791e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4492542 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Yuxin Hu 2ee97f91 2023-04-27T15:43:03 Unconditionally enable append_aliased_memory_decorations_to_ssbo After the discussion with Khronos group on how to handle aliased ssbo in GL driver: https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/4321 https://gitlab.khronos.org/opengl/API/-/issues/183 it is the correct behavior to append aliased memory qualifier to SSBOs, if restrict memory qualifier is not specified. Unconditonally enable this feature for all hardware. Bug: b/266235549 Change-Id: I20c811710bb10f0de39de5707adab0262a46d296 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4485008 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
Amirali Abdolrashidi f9a700ee 2023-04-27T14:15:56 Disable mutable texture upload for discrete GPUs A local case was observed for the trace "vainglory" on Linux, where it fails due to OOM on one of the memory heaps. * mutableMipmapTextureUpload is now disabled when discrete GPUs are used in order to migitate OOM for VRAM. * After this change, the heap usage for "vainglory" drops from ~3,794,862,080 to ~1,126,891,520. Bug: b/278600575 Change-Id: Ie09d0037ffaf28640c4e36c5fff5d329c3a3f9cc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4458269 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao b875f47b 2023-04-24T11:11:03 Vulkan: Make mLastSubmittedQueueSerial reflect what it means Right now we always update ContextVk::mLastSubmittedQueueSerial and ContextVk::mLastFlushedQueueSerial when context becomes current, even though it does not make any submission. It was done it this way mainly for simplification (i.e, you will always see both queueSerial's index the same). But this also causes a performance cost when a mLastSubmittedQueueSerial is used to tag a resource. For example, if you insert a EGLSync right after makeCurrent, that EGLSync may get a queue serial number bigger than it should be, which will translate to longer sync wait time. This CL changes these two queue serial to exact what the name suggests, that it will only update if we made a "flush" or "submit" call. Bug: b/277644512 Change-Id: Ibe4c78985a3fe0726836d620202e5276894a8e7c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4458532 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi f4febc9c 2023-04-25T10:16:47 Vulkan: Remove generic syncval suppression about storage buffers Bug: angleproject:7125 Change-Id: I3778e82c90f9d546f4e3948894060af0173b7b84 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4471628 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 13935469 2023-04-25T09:58:42 Vulkan: Fix access mask of generateMipmap's blit Bug: angleproject:8143 Bug: angleproject:7125 Change-Id: I6e5b6cd1f445c2c41d4b78aeb368e30cc4c5354b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4475444 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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 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>
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>
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>
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>
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>
Yuxin Hu 29abd5a2 2023-03-06T11:35:45 Explicitly Add Aliased Memory Decoration in SpirV In GLSL, aliased memory qualifier is implicitly available, unless we explicitly specify the memory is restrict: https://www.khronos.org/opengl/wiki/Type_Qualifier_(GLSL)#Memory_qualifiers. However, in SpirV, aliased memory qualifier has to be explicitly specified: https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#AliasingSection This change adds the aliased memory decorations to SSBO if the GLSL does not specify the restrict memory qualifier. This is a temporary workaround to fix the deqp test failures on some android devices. Eventually we would like to waive this test for ANGLE due to alised memory in Vulkan does not suppose to affect SSBOs that have different set/binding, please refer to this Khronos ticket for more details: https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/4321 Bug: b/266235549 Change-Id: Ic7afc417a5d421664b60e0413a011314787e14e7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4312130 Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 97897d92 2023-03-27T16:02:57 Vulkan: Work around driver bug with dynamic primitive restart This CL forces the state to be static on buggy drivers. Bug: b/275210062 Change-Id: Ia3391ecb19c3c9d19c05a83e11da8c718513a4e2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4374104 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@google.com>
Igor Nazarov 85735eb4 2023-03-17T19:56:23 Vulkan: Enable async features for Secondary Command Buffers. Since, all known problems with Secondary Command Buffers and async features are fixed, it should be safe to allow enabling these features for testing. Locally, this CL passes custom build dEQP tests (EGL/GLES2/3/3.1) with asyncCommandQueue and Vulkan Secondary Command buffers enabled. Tests were executed on S906B that uses ANGLE as the system GLES driver. Bug: angleproject:6811 Bug: angleproject:6100 Change-Id: Id3ef6df56f0a3bd1986f2e6047f01e6eac165fc6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4350270 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>