src/libANGLE/renderer/vulkan/RendererVk.cpp


Log

Author Commit Date CI Message
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>
Amirali Abdolrashidi f2c5ce4e 2023-03-16T17:44:56 Re-enable mutable texture upload for one context It was observed that in some apps, mutable textures are uploaded in a context, but that context's outside RP command buffer is not flushed at all, resulting in invalid (noise) or incorrect textures. * Added isEligibleForMutableTextureFlush() to be used to determine whether onMutableTextureUpload() should be called. * Restricted the use of mutable texture upload to single-context share groups. * When the number of contexts becomes greater than one, the original context's outside render pass command buffer is flushed. * Added related tests. * Added a test to make sure that textures can be uploaded in one thread, and used for draw calls in another, with the help of a sync object. * Added a test to make sure that textures can be uploaded in the main thread, and used in a new thread. * Added a test in which a new context is created after mutable mipmap textures are defined. Bug: b/264143971 Change-Id: I66c0d8b04d39bb7244e5752aac0e46a0192f012e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4349156 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 7d1a401b 2023-01-17T18:45:55 Vulkan: Fix freeing not completed Secondary Command Buffers. Problem: - Protected Context flushes its commands to the Protected Primary Command Buffer; - Unprotected Context flushes its commands to the Unprotected Primary Command Buffer; - Context with different "egl::ContextPriority" may flush commands into different Primary Command Buffers. - Secondary Command Buffers from all Contexts end-up in the single "CommandBufferRecycler::mSecondaryCommandBuffersToReset" list; - One of the Contexts submits its Primary Command Buffer, and attaches current "mSecondaryCommandBuffersToReset" list to the "CommandBatch"; - Secondary Command Buffers of other Contexts may be collected and later freed by "SecondaryCommandPool" without submitting/completion corresponding Primary Command Buffers. Fix: - Moving "mSecondaryCommandBuffersToReset" to the new "SecondaryCommandBufferCollector" class. - Separate "SecondaryCommandBufferCollector" instance is stored in the "CommandQueue" for each current Primary Command Buffer. Additionally fixes "asyncCommandQueue" related problem: "releaseCommandBuffersToReset()" may get outdated results if flush is not yet executed in the "asyncCommandQueue" thread. Bug: angleproject:6100 Change-Id: I7df161ac1f999fb34d4eccaebb603c58ecb1ac11 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4334579 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov 9b6368cc 2023-03-14T14:48:30 Vulkan: Fix freeing Secondary Command Buffers from wrong thread. Problem: - Secondary Command Buffers are freed in the "CommandQueue" class. - This may happen from any Context thread that calls "checkCompletedCommands()" or "finish<*>()" methods. - As the result, one Command Buffer may be freed from one thread, while other Command Buffer from the same "VkCommandPool" is allocated/reset/recorded in the other thread. Vulkan spec demands external "VkCommandPool" synchronization for any modifications (begin/end/reset/free/cmd) on its "VkCommandBuffer"s. Fix: - Added new "rx::vk::SecondaryCommandPool" class that replaces the "rx::vk::CommandPool" wrapper. - This class has "collect()" method for storing "VkCommandBuffer"s. Collected buffers are freed from the correct thread on the next "allocate()" call. This CL only fixes the problem, keeping Secondary Command Buffer memory management as is (allocate/free single buffer without reuse). In the future CLs this behavior may be changed (reuse buffers, reset/free entire pools). Bug: angleproject:6100 Change-Id: If938416c4df4fe55f0cfb418b6759721ac53098b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4334577 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 29f80eda 2023-03-15T14:59:26 Vulkan: Hot fix crash when using Invalid VkSemaphore Object. Problem started after the commit: b194c21ad30145ca15153a93425a37a8211df373 Vulkan: Enforce ContextPriority in ShareGroup and with EGLImage Happens only with enabled "asyncCommandQueue" feature: - "RendererVk::submitPriorityDependency()" creates "Vk::Semaphore" object on the stack. - Then submits this Semaphore with "queueSubmitWaitSemaphore()" method. - "vk::Semaphore" passed to the "CommandProcessor"s "enqueueSubmitOneOffCommands()" method where stored in the "CommandProcessorTask". - Stack "vk::Semaphore" object garbage collected by the "RendererVk" and then destroyed. - "CommandProcessorTask" now points to the invalid memory. This CL changes usage of "vk::Semaphore" and "vk::Fence" pointers in the "CommandProcessor.h" classes to Vulkan Handles. This will make API consistent, fix this problem, and avoid similar problems in the future. Issue discovered while testing ANGLE as a system driver on S906B with "asyncCommandQueue" enabled. Several system processes crashed with VVL: VUID-VkSubmitInfo-pWaitSemaphores-parameter(ERROR / SPEC):msgNum: -1328048864 - Validation Error: [ VUID-VkSubmitInfo-pWaitSemaphores-parameter ] Object 0: handle = 0xb4000078c1aab430, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0xb0d79520 | Invalid VkSemaphore Object 0xb400007831740b98. The Vulkan spec states: If waitSemaphoreCount is not 0, pWaitSemaphores must be a valid pointer to an array of waitSemaphoreCount valid VkSemaphore handles (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkSubmitInfo-pWaitSemaphores-parameter) Bug: angleproject:8039 Change-Id: I8818288b9783b5c5a7970bf82ec721452ae57471 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4339758 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Yiwei Zhang 12aefbc0 2023-03-16T04:43:38 Vulkan: add MESA Virtio-GPU Venus driver feature conditions Bug: b/267576238 Change-Id: I5f0c479b23cd3465ca7560966bb4d98edf4c40df Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4342819 Auto-Submit: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 4edccb15 2023-01-17T16:17:35 Vulkan: Fixed Context Priority mixing problems. Problem details: - Each "egl::ContextPriority" may have separate "VkQueue". - "CommandQueue" only has two "PrimaryCommandBuffer"s for normal and protected content. - Commands from multiple "ContextVk" may be written to a single "PrimaryCommandBuffer". - That "PrimaryCommandBuffer" may be randomly submitted to different "VkQueue"s. - As the result - Commands from a single "ContextVk" may be submitted to multiple "VkQueue"s. Fix details: - Created separate "PrimaryCommandBuffer" (lazily allocated) for each "egl::ContextPriority". - Commands with different priorities can't be mixed in a single "PrimaryCommandBuffer". - Therefore - Commands from a single "ContextVk" will be submitted to a single "VkQueue". - No difference for applications that use single "egl::ContextPriority" for all Contexts. Notes: Another problem when resource is used in multiple Contexts with different "VkQueue" (Priority). One solution is to use Semaphores. Another is to enfore same Priority for all Contexts in a Share Group and Default Priority when using EGLImage. This solution was submitted in the previous CL: Vulkan: Enforce ContextPriority in ShareGroup and with EGLImage Below test fails on G996B without this CL. Bug: angleproject:8039 Test: angle_end2end_tests --gtest_filter=MultithreadingTestES3.ContextPriorityMixing* Change-Id: Iaa57826ca55956944f922813fcfac42f1a764dbb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4194183 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov cd901cdd 2023-03-03T17:04:27 Vulkan: Add and use rx::vk::ReleasableResource class. This is a follow up for CL: Vulkan: Enforce ContextPriority in ShareGroup and with EGLImage Bug: angleproject:8039 Change-Id: I9e654557d4a1ce9aee4b04f1211eeb6ae3f0e482 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4306721 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov b194c21a 2023-02-24T15:41:00 Vulkan: Enforce ContextPriority in ShareGroup and with EGLImage This CL enforces single Context Priority for all Contexts in a Share Group. This is necessary until Vulkan Semaphores will be used to automatically synchronize Resource access between Contexts. Contexts Priority updated when new Contexts is added to the Share Group. New Priority will be the highest among all ever existed Contexts (except if Priority is locked). When Contexts Priority changes, all flushed commands are submitted to the old VkQueue and semaphore is inserted into the new VkQueue. Currently opened RenderPasses and commands will not be flushed. When EGLImage is used in a Context, all Contexts in that Share Group locked (forever) to the Default Priority (Medium). This is done to simplify the implementation and because of the current limitations (lack of mutex protection across Context Share Groups). Notes: - the EGL_CONTEXT_PRIORITY_LEVEL_IMG will report initial priority. - below tests fail on G996B without this CL. Bug: angleproject:8039 Test: angle_end2end_tests --gtest_filter=MultithreadingTestES3.RenderThenSampleDifferentContextPriority* Test: angle_end2end_tests --gtest_filter=MultithreadingTestES3.RenderThenSampleInNewContextWithDifferentPriority* Test: angle_end2end_tests --gtest_filter=MultithreadingTestES3.RenderThenSampleDifferentContextPriorityUsingEGLImage* Change-Id: Ia6a2f0084d39168a58fd7ec33edc90ece9cead05 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4289750 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Roman Lavrov 63a60225 2023-03-09T12:36:57 Ignore VUID-VkGraphicsPipelineCreateInfo-None-06573. Occurring in certain trace tests after vulkan-deps update. Bug: angleproject:8076 Change-Id: I267ff7ff5a41cdcfec44b11893877120d02a89ce Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4324721 Commit-Queue: Roman Lavrov <romanl@google.com> Auto-Submit: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov 7ee61366 2023-03-09T16:18:56 Revert "Vulkan: SurfaceVk should only wait for GPU work that uses it" This reverts commit 5b63e1dc1d5e96018d0ad30582265a612d309f3b. Reason for revert: angle_deqp_internal_main_presubmit device lost in android rolls https://anglebug.com/8073 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 Bug: angleproject:8073 Change-Id: Id0bfe7be670b7d44ed91e61f2c98a189bd1f214c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4324718 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
Amirali Abdolrashidi b0d99f72 2023-02-22T13:48:16 Move the memory tracking classes to new files * Moved the classes, functions, and constants related to memory tracking to MemoryTracking.h and MemoryTracking.cpp. Main classes include the following: * MemoryAllocationTracker * MemoryReport * MemoryAllocationType * MemoryAllocationInfo * MemoryLogSeverity * New static function added in RendererVk to get the Vulkan object type name (GetVulkanObjectTypeName()). Bug: b/262029018 Change-Id: I619001e3c24114c4fe7bf024498338bce146fced Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4284639 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov ac8513fa 2023-03-03T16:10:32 Vulkan: Add and use ScopedQueueSerialIndex helper class. This is a follow up for CL: eb0475c05425d94a4516b708c1c9075e3bc423a7 Vulkan: Cleanup RendererVk::allocateQueueSerialIndex method. Made private "allocateQueueSerialIndex(SerialIndex *)" method and renamed to "allocateQueueSerialIndexImpl" to limit incorrect API usage. Bug: b/267806287 Change-Id: I4d1a9875d454c29f930a5e844161d2a10dc2675b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4306720 Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov 5331491b 2023-03-06T17:26:30 SYNC-HAZARD-READ-AFTER-WRITE: VkNonDispatchableHandle on x86 Also link to the new bug. Bug: angleproject:8054 Change-Id: I2421d625f64a2530768ea35497a45091a0317025 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4312523 Auto-Submit: Roman Lavrov <romanl@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Roman Lavrov <romanl@google.com>
Charlie Lao 5b63e1dc 2023-02-03T15:14:00 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>
Roman Lavrov 569a881f 2023-03-06T16:43:18 Make SYNC-HAZARD-READ-AFTER-WRITE case less specific. SYNC_VERTEX_SHADER_SHADER_STORAGE_READ added in https://crrev.com/c/4306772 Different prior_usage in TransformFeedbackTest Bug: angleproject:8054 Change-Id: Ia79fc0edd52dff49255906158a5621d4860d7df5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4313319 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
Igor Nazarov 4f87f4e9 2023-03-03T13:19:09 Vulkan: Add useResetCommandBufferBitForSecondaryPools feature. Currently ANGLE does not use "vkResetCommandBuffer()" on Vulkan Secondary Command Buffers. Instead it uses "vkFreeCommandBuffers()" and "vkAllocateCommandBuffers". According to spec, "VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT" is required only for command buffer reset operations. However, some ARM drivers may not free memory in "vkFreeCommandBuffers()" without this flag. Bug: angleproject:8059 Change-Id: Ibfe45bca345dc48484b625c450369d30805cec77 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4306722 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov 0eea2893 2023-03-03T18:55:21 Vulkan: Use *_POOL_CREATE_TRANSIENT_BIT in OneOffCommandPool Bug: angleproject:8061 Change-Id: Ib1f851e83e681ee369cac8da0ff52cd3951c5749 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4306724 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com>
Roman Lavrov 390fa116 2023-03-06T10:51:24 Suppress another SYNC-HAZARD-READ-AFTER-WRITE case. Starts at: https://github.com/KhronosGroup/Vulkan-ValidationLayers/commit/dd401219bdb982046bb235160c29643c597d6f16 --gtest_filter='MemoryBarrierBufferTest.TransformFeedbackBitWriteThenCapture/ES3_1_Vulkan_SwiftShader*' Bug: angleproject:8054 Change-Id: Ie57665a757c6664a29d351d43fbad9e4743b57f9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4306772 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov fee173f9 2023-01-17T18:45:41 Vulkan: Fix freeing Command Buffers with wrong Pool. Problem: - Multiple Contexts flushes it's commands to the Primary Command buffer; - Secondary Command Buffers from all Contexts end-up in the single "CommandBufferRecycler::mSecondaryCommandBuffersToReset" list; - One of the Contexts submits all these commands, and attaches it's "VkCommandPool" to the "CommandBatch". - This "VkCommandPool" will be used to free "VkCommandBuffer"s from all Contexts and pools. Fix: - Attaching "VkCommandPool" to each "VulkanSecondaryCommandBuffer" instance. - "vkFreeCommandBuffers()" is called from the new "VulkanSecondaryCommandBuffer::free()" method. Bug: angleproject:6100 Change-Id: Ic4d66d8b0f71e5ff06047004ed21428d6dce385b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4300870 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Amirali Abdolrashidi 3aa64876 2023-03-06T04:17:57 Revert "Vulkan: Attempt to fix the tsan complain regarding volk." This reverts commit 62e5870452e1e2d4a55ee1307ada27b101d89dbf. Reason for revert: Suspected to be causing the win-trace bot flakiness (https://anglebug.com/8063) Original change's description: > Vulkan: Attempt to fix the tsan complain regarding volk. > > In certain cases, I am seeing volk function pointer been set while it is > still being accessed. See > https://chromium-swarm.appspot.com/task?id=60b37aa811f8b410. My guess it > is related to some tests configs that end up with RendererVk gets > initialized while other instance is still running. This is attempt to > fix the tsan complain by only load volk function pointer if needed. > > Bug: angleproject:8055 > Change-Id: I5dcc62876bf93a250080de1f8e1b97d2b7570ab8 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4300072 > Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: angleproject:8055 Change-Id: Ie9fe707113656bcc803aacbf9559671564944b69 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4309928 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Alexey Knyazev 3fed0866 2023-02-22T00:00:00 Implement EXT_texture_mirror_clamp_to_edge Support GL_MIRROR_CLAMP_TO_EDGE_EXT address mode when native support is available. Adjusted validation, sorted switch cases by target enums order. Added new TextureMirrorClampToEdge* end2end tests. Drive-by: fixed texture address computation for integer formats with GL_MIRRORED_REPEAT on D3D11. Fixed: angleproject:7968 Change-Id: Iaf29c8b4b32a7630c2a871f832d171f4bc4e2672 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4289137 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 31bd0c58 2023-03-01T10:52:30 Vulkan: Do immediate cleanup after finishOneCommandBatch This is follow up for crrev.com/c/4244823. This adds postSubmitCheck in RendererVk::queueSubmitOneOff(). It adds immediate clean up in finishOneCommandBatch and renamed to finishOneCommandBatchAndCleanup. Bug: b/255411748 Change-Id: I1d3dbd7dfe9642f4bc77b17552281a4c7b6c2d69 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4300098 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 62e58704 2023-03-01T14:46:54 Vulkan: Attempt to fix the tsan complain regarding volk. In certain cases, I am seeing volk function pointer been set while it is still being accessed. See https://chromium-swarm.appspot.com/task?id=60b37aa811f8b410. My guess it is related to some tests configs that end up with RendererVk gets initialized while other instance is still running. This is attempt to fix the tsan complain by only load volk function pointer if needed. Bug: angleproject:8055 Change-Id: I5dcc62876bf93a250080de1f8e1b97d2b7570ab8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4300072 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Igor Nazarov eb0475c0 2023-02-23T22:59:14 Vulkan: Cleanup RendererVk::allocateQueueSerialIndex method. Currently this method makes 2 distinct tasks: - allocates QueueSerialIndex. - gets LastSubmittedSerial. In case of "queueSubmitOneOff()" (and future uses) "LastSubmittedSerial" is not necessary. This produces extra work and makes code more complex. This CL makes two separate functions: angle::Result allocateQueueSerialIndex(SerialIndex *indexOut); angle::Result allocateQueueSerialIndex(QueueSerial *queueSerialOut); The "queueSubmitOneOff()" was simplified. Additionally, fixed possible SerialIndex leak if method fails before "releaseQueueSerialIndex()". Bug: b/267806287 Change-Id: I1dfb91b9f409aa17e8f1de222f7b01345109e6d3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4289749 Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com>
Charlie Lao e180ed5e 2023-02-27T14:40:10 Vulkan: Apply postSubmitCheck to async submission code path postSubmitCheck is doing CPU throttling if we accumulate excessive amount of garbage. There is no good reason this should not apply in async submission. This CL moves the call so that it applies to both cases. Bug: b/255411748 Change-Id: Ib36344dfe9e6f1c0120734302c0d4083073e004c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4295366 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao e88b061c 2023-02-17T13:36:24 Vulkan: Follow up fix and enable asyncCommandBufferReset flag This CL makes any follow up fix for crrev.com/c/4244823 and enables asyncCommandBufferReset feature flag. It changes CommandQueue::checkCompletedCommands only do the check and update mLastCompletedSerials. It makes async command processor thread always call checkCompletedCommands if mNeedCommandsAndGarbageCleanup is true so that we can clean up more garbages. This CL also makes garbage clean up always done in async thread even if asyncCommandBufferReset is disabled. Bug: b/255411748 Change-Id: I1d63aa9f1f565d81780a39c29b919da3dd5a68be Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4264175 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Charlie Lao <cclao@google.com>
Charlie Lao 6d282d62 2023-02-08T16:51:07 Vulkan: Move retireFinishedCommands/garbageCleanup to worker thread This CL separate out the logic of mLastCompletedQueueSerial update and retireFinishedCommands and garbage clean up into different functions. At submission, previously we are always check fence and update mLastCompletedQueueSerials and calling reset on finished commands and do garbage clean up. With this CL, we only do the fence check and update mLastCompletedQueueSerials. Then it request worker thread to do the command buffer reset and garbage cleanup. We uses the CommandProcessor's thread for the reset and cleanup, since async submission path needs to handle this clean up anyway. This CL also added a new feature flag asyncCommandBufferReset and it is disabled right now. This will be enabled in the follow up CL. Bug: b/255411748 Change-Id: I6da558f8d4c962eb038e2378ccc76c464101cde2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4244823 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Yuly Novikov dd6d8302 2023-02-28T14:24:43 Suppress VUID-vkCmdEndDebugUtilsLabelEXT-commandBuffer-01912 New VUID added in https://github.com/KhronosGroup/Vulkan-ValidationLayers/pull/5277 Bug: chromium:1420265 Change-Id: I139815fdfd90439c5a2ea79e467a60ba54ecbc0e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4296799 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Roman Lavrov <romanl@google.com>
Amirali Abdolrashidi 2c7447e2 2023-01-19T16:17:39 Always keep track of memory allocation counts * Memory allocation counts are now tracked at all times, similar to allocation sizes. * Changed the per-heap allocation trackers from vectors to arrays of atomic variables. * Added asserts to the getter functions related to memory allocation. * mMemoryAllocationMutex is now used for enabled debug layers only. * Added memory type index in allocation and deallocation debug logs. * Capitalized static functions regarding memory allocation in RendererVk.cpp. Bug: b/262029018 Bug: b/266466279 Change-Id: Idb740048f934f3d725240c78c978341697895f6c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4182550 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Amirali Abdolrashidi 3a7904e1 2023-01-25T23:56:56 Vulkan: Use VMA suballocation for images There is a maximum limit for device memory object allocation. On some platforms, there can be an error regarding too many object allocations when 4096 device memory handles have been allocated. Suballocation can help mitigate this issue. In this CL, some images will be allocated using VMA API calls, which use suballocation. * Added a new feature (useVmaForImageSuballocation). * Added VMA allocation for ImageHelper, which is used in initMemory(). * Suballocation is used for VMA image allocation. * If enabled, mVmaAllocation will be initialized in the ImageHelper object (instead of mDeviceMemory). * It is currently used for all platforms. * Minor change to the name of an arg in CreateBuffer() declaration. * Added test to make sure we can allocate at least 4096 images on supported platforms (8000 in the test). * Skipped the test "NonZeroBaseEmulatedClear" when run on Linux/Intel if this feature is enabled (due to output color mismatch). * Skipped several tests for capture/replay on Windows. Bug: b/218891184 Change-Id: Ibf80c9c8c485b301da7d23b5ba4bcbb1a8e3194f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4191202 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 31684d8c 2023-02-18T11:11:57 Vulkan: Lazily create swapchain image views In compliance with VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT. Bug: angleproject:7878 Big: b/269606195 Change-Id: I917c6888b325f768dbc6384828a6e462792d3c0b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4267510 Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Chris Forbes <chrisforbes@google.com>
Shahbaz Youssefi 7d8e2778 2023-02-13T10:04:08 Vulkan: Remove usage of VK_EXT_external_memory_host This extension is no longer used by ANGLE Bug: angleproject:7959 Change-Id: If6c0e89e63b8b06fd03f7b6a0b083a18bada34fe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4244599 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao e1dfc00a 2023-02-15T16:21:37 Vulkan: Make waitForPendingPresent drain work in the calling thread Since we are waiting, there is no point to have work done in CommandProcessor's worker thread. It can just wait and drain the task in the calling thread. This is consistent with waitForResourceUseToBeSubmitted. This allows us to remove mutex and condition variable from SwapchainStatus. Bug: b/269524271 Change-Id: I9d7e17c77c879b6957fc3b74aab02f7f5c9db052 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4257252 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com>
Charlie Lao 79bfee1c 2023-02-15T15:33:56 Vulkan: Clean up CommandProcessor::queuePresent Right now queuePresent API returns VkResult in two places, via return value and SwapchainStatus structure. This CL makes it only return via SwapchainStatus::lastPresentResult so that two code path are the same. Bug: b/269524271 Change-Id: I7ab3c2bee08961a10718a2e5daa1c7f03e97e85d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4257927 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Charlie Lao c402ea1c 2023-02-15T12:01:38 Vulkan: Rename hasUnfinishedUse to hasResourceUseFinished Most usage of hasUnfinishedUse is for !hasUnfinishedUse, and there was feedback that negative API is not preferred. This CL changes it to positive API name. Similarly renamed hasUnsubmittedUse to hasResourceUseSubmitted. Bug: b/267348918 Change-Id: Idb10b0f998ec50116ffb6aada19a98a516e87824 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4257105 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 5dba27e0 2023-02-15T10:24:38 Vulkan: CommandProcessor API name clean up This CL is mechanical change only and limited to CommandProcessor class. This CL renames submitCommands to enqueueSubmitCommands, queueSubmitOneOff to enqueueSubmitOneOffCommand, queuePresent to enqueuePresent, flushWaitSemaphores to enqueueFlushWaitSemaphores, flushOutsideRPCommands to enqueueFlushOutsideRPCommands, flushRenderPassCommands to enqueueFlushRenderPassCommands. This CL also renames CommandProcessor::mLastSubmittedSerial to mLastEnqueuedSerials, and getLastSubmittedSerial to getLastEnqueuedSerial, hasUnsubmittedUse to hasResourceUseEnqueued (opposite meaning). Bug: b/267348918 Change-Id: I611889815f5824837dc6e0f547e3cddc595d447b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4255809 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Solti b4116fea 2023-02-17T16:14:27 Disable supportsSwapchainMaintenance1 feature on Android Temporarily disable upportsSwapchainMaintenance1 feature on Android devices to unblock the ANGLE-To-Android roller, while the auto-roller failure investigation is taking place. Bug: b/269606195 Change-Id: I8a122b04996c9f0f02cbaaedcba5c6fb0615e5e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4264812 Commit-Queue: Solti Ho <solti@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 5c2a6010 2023-02-13T16:32:58 Vulkan: Fix loading instance extension entry points This change makes sure instance extension entry points are loaded right after the instance is. Previously, this was done after all features are initialized, including device features, but the code that decides the device features was using the instance entry points. Bug: angleproject:7959 Change-Id: I6869f40261eec7a3146c9e0e05b3fc139bc9223a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4247097 Commit-Queue: Ian Elliott <ianelliott@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Shahbaz Youssefi 689e523c 2023-02-07T14:33:23 Vulkan: Remove vkResetQueryPoolEXT null-check hack This was observed to be nullptr in some builds and assumed to be a driver bug. However, this was due to a bug in implementation where the code that was supposed to load the entry point was actually loading another entry point. This was fixed in https://chromium-review.googlesource.com/c/angle/angle/+/4224582 Bug: chromium:1273344 Change-Id: I8c2003b322878fcab9282c793a8b1901d5d8e7a5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4227990 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Geoff Lang cad19f01 2022-02-01T17:36:03 Vulkan: Wait forever when waiting on fences If a timeout occurs while waiting for the VK queue to be idle during context destruction, there is no way to safely delete the resources without potentially crashing as the driver is still reading them. Instead, wait forever and let Chrome's watchdog tear the process down. Bug: chromium:1223346 Change-Id: Ifa91465270f54b62a5ead88e8f26b3315072c380 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3430243 Reviewed-by: Zhenyao Mo <zmo@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 54951da2 2022-12-18T17:11:33 Vulkan: Refactor extension vs core version checks Extensions are now grouped based on promotion-to-core status, and initialization code is generally cleaned up. ANGLE currently doesn't attempt to use a core version above Vulkan 1.1, as extensions are always assumed to be exposed even if promoted to core in later versions. With this change, it would be simpler to use a newer core version if ever necessary. Bug: angleproject:7959 Change-Id: Ia5fd3e06c18f7289e9e5a63af0f039a6dc89c687 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4224582 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 9d7292a8 2023-02-09T15:56:57 Vulkan: Unsupress fixed VUs Bug: chromium:1412096 Change-Id: I6b5f2c0e894d354216cb49deba3a65aa7782004f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4237579 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Igor Nazarov aa1f7e19 2023-02-08T21:05:35 Vulkan: Fix CommandQueue Wait Semaphores asyncCommandQueue race. Recently implemented fix has a problem: When using "asyncCommandQueue", wait semaphores flush performed in the context thread, while submit in the async thread. Both operations protected by the mutex, so there is no data race or other UB. It is a potential performance problem: submit operation may attach wait semaphores prematurely, before corresponding commands flushed into the primary command buffer. Fix adds "CustomTask::FlushWaitSemaphores" to ensure wait semaphores and commands flushed in order. Bug: angleproject:7995 Change-Id: I7d3cfad867c59d3cd0a5c0bb3f81ae8d98238362 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4231844 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov 7da34485 2023-01-17T16:17:51 Vulkan: Changed "asyncCommandQueue" Pending Present info logic. Required for future commits. Details: - Fixes possible stale result in "CommandProcessor::mSwapchainStatus" after WindowSurfaceVk destruction. - Fixes possible dead-lock when the old "getLastPresentResult()" method might be called more than once. - New implementation allows waiting multiple times (and multiple threads) for the same Present result. Before commit: 31c4093651079775acf34ea1bb06bdabb4ea4386 Vulkan: Rework present semaphore recycling There was assert in CTS: dEQP-EGL.functional.swap_buffers_with_damage.resize_before_swap.* Assert failed in ~SwapchainCleanupData (../../src/libANGLE/renderer/vulkan/SurfaceVk.cpp:669): swapchain == VK_NULL_HANDLE Because of the stale "CommandProcessor::mSwapchainStatus" and a race-condition as the result. The "Vulkan: Rework present semaphore recycling" did not fix the problem, but rather changed undefined behavior symptom. Bug: None Change-Id: Idf08a29265a43c711941b142001eb4380e2aa2b6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4194184 Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 93515ccf 2023-02-08T18:04:40 Vulkan: Add OneOffCommandPool for unprotected/protected commands Current implementation of "OneOffCommandPool" initializes single "vk::CommandPool" instance basing on the first use. This may cause a situation when Protected command buffer is used for Unprotected content/submissions and vice versa. This CL replaces single "OneOffCommandPool" instance with "ProtectionType" enumeration map. Bug: angleproject:8010 Change-Id: I7baa7ff5a42a96bc2f8bfeedcdc74d70a455abb0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4232116 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 8b9bd182 2023-02-08T16:17:10 Vulkan: Refactoring to use ProtectionType enum instead of bool This is a second stage of refactoring that was started here: Vulkan: Minor CommandQueue implementation refactoring. 0210b46d35b51ea04bddafb48ba406a87c39e58e Enumeration renamed: CommandContent -> ProtectionType. Currently interfaces of ContextVk/RendererVk/CommandQueue use "hasProtectedContent" boolean. Internally CommandQueue uses "vk::ProtectionType" enumeration to separate states related to Unprotected/Protected commands. This CL replaces boolean with enumeration for consistency. Bug: angleproject:7995 Change-Id: Ibb98cce661358d464be7c6a8367a1297d7093b1c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4232114 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov b6cc5754 2023-01-17T16:17:22 Vulkan: Fixed Wait Semaphores problems. This feature fixes 2 problems. 1. Swapchain Image Acquire Semaphore added to wait list AFTER rendering commands: - Make Window Surface current. - Clear Window Surface (Image is Acquired). - Perform rendering to the Window Surface. - Change to other Surface (for example: PbufferSurface) using the same Context. - Unmake Context from current to ensure commands are submitted. - Rendering commands to the Window Surface will be submitted without Acquire Semaphore. 2. Context from other thread may submit command of another Context without proper Wait Semaphores: - Make Window Surface current in the first context. - Clear Window Surface (Image is Acquired). - Perform rendering to the Window Surface. - Call "glBeginQuery()/glEndQuery()" (or other commands) - this will flush command to the Primary Command Buffer without submitting. - In other Thread and Context make some Surface current (for example: PbufferSurface). - Clear that surface with scissor and unmake Context from current to ensure commands are submitted. - Rendering commands to the Window Surface from the first Context will be submitted without Acquire Semaphore. - Problem will happen even if add Wait Semaphore BEFORE writing rendering commands. Bug: angleproject:7995 Test: angle_end2end_tests --gtest_filter="EGLSurfaceTest.WaitSemaphoreAddedAfterCommands*" Test: angle_end2end_tests --gtest_filter="EGLSurfaceTest.CommandsSubmittedWithoutWaitSemaphore*" Change-Id: I28174ff98fdd09b4117962fc0810cfeeb2a4d1f1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4194182 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Kaiyi Li 9b2f52d2 2023-02-02T14:25:44 Use WARN to log the allocation info on allocation failure ANGLE just strips off the INFO log, so we won't see any logs in production when an allocation failure happens. Change to use WARN instead. Bug: b/266466279 Test: launch with an emulator, see the log output when allocation fails Change-Id: I0a0828176feaf840aaa95f7127a2b90cf9cc653c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4219939 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Auto-Submit: Kaiyi Li <kaiyili@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao b96f3abd 2023-02-03T13:12:29 Vulkan: Make Context::mLastSubmittedSerial to QueueSerial Right now Context::mLastSubmittedSerial and mLastFlushedSerial are all Serial type instead of QueueSerial. Most places we do need QueueSerial. This CL changes them to QueueSerial type. This simplifies and improves code readability. No actual functional change is expected with this CL. Bug: b/267806287 Change-Id: Ib00cae2637ee9ed95e5fc00060c63017b04e26c5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4219944 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
angle-autoroll 6bdd90a7 2023-02-02T21:36:41 Manual roll vulkan-deps from c7184adab227 to 7ab598f59574 (12 revisions) Manual roll requested by ynovikov@google.com Suppressing VUIDs: "VUID-VkAttachmentDescription2-stencilStoreOp-parameter", "VUID-VkAttachmentDescription2-storeOp-parameter", https://chromium.googlesource.com/vulkan-deps.git/+log/c7184adab227..7ab598f59574 Changed dependencies: * glslang: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang.git/+log/58d302cfa2..7341a21b34 * spirv-cross: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross.git/+log/199d0cb8a9..459fa67937 * spirv-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git/+log/8a0fe779e5..d8759a140b * vulkan-loader: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader.git/+log/3bc9d7c0c5..ebb932a402 * vulkan-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools.git/+log/df9d118bb1..e1940bd368 * vulkan-validation-layers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/99b147ad63..c5d638465e 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: chromium:1412096 Change-Id: Ie97d47f81bfd367e18602bfae885ba487bc732e9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4219865 Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Yuly Novikov b925c43e 2023-02-03T21:12:48 Revert "Vulkan: Remove platform restriction of EGL_ANDROID_native_fence_sync" This reverts commit f852187dfbb094a981331a584d65dc5a4069644e. Reason for revert: Suspect for crashes on Fuchsia https://chromium-review.googlesource.com/c/chromium/src/+/4221336 https://cr-buildbucket.appspot.com/build/8790151118736391057 Original change's description: > Vulkan: Remove platform restriction of EGL_ANDROID_native_fence_sync > > 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: I2b7381fd1702be578014539cbc96bfa7ace9c295 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4218602 Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Sungyong Choi f852187d 2022-11-15T17:26:47 Vulkan: Remove platform restriction of EGL_ANDROID_native_fence_sync 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>
angle-autoroll 2f3ce7b6 2023-02-01T10:01:30 Roll vulkan-deps from 30323acb3089 to c7184adab227 (11 revisions) Suppressed VUID-VkImageCreateInfo-pNext-00990 introduced in https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+/64da29612fe6f8f2922101a5ef64f807db860b6b https://chromium.googlesource.com/vulkan-deps.git/+log/30323acb3089..c7184adab227 Changed dependencies: * glslang: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang.git/+log/4e9cde50bb..58d302cfa2 * spirv-tools: https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git/+log/fcfc3c580c..8a0fe779e5 * vulkan-loader: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader.git/+log/dda7872300..3bc9d7c0c5 * vulkan-validation-layers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/ea1305065a..99b147ad63 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: chromium:1412096 Change-Id: Ie6ef81d3ecb35670bcb9632096cc99f57012ef5d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4211601 Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 5a2d1ce9 2023-01-17T16:16:39 Vulkan: Disable Imageless Framebuffer in some conditions. Some Samsung Vulkan drivers crash in vkCmdClearAttachments() when imageless Framebuffer is used to begin Secondary Command Buffer before the corresponding vkCmdBeginRenderPass(). Bug: None Change-Id: I09833af6e529f64f534d9d33825a53eee5c49212 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4194179 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 73cc578b 2023-01-30T12:22:20 Disable mutable texture upload due to render issue * In some applications, enabling this feature can lead to incorrect rendering of some textures. This CL will disable this feature for now. Bug: b/264143971 Change-Id: I69933bbc3caaf71d03645b4c0b0424b9173ee585 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4205049 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Jose Dapena Paz 6fb2da90 2023-01-30T17:43:59 Do not use std::locale in Vulkan memory allocation tracker As Chromium is built without RTTI, but it may be running on top of system libstdc++ built with RTTI, std::locale should not be used with an inherited facet. This will crash trying to dynamic_cast the facet. This change also avoids having different formats depending on the locale. If, in the future, a format is wanted for improving log readability, then a custom helper should be added, instead of using std::locale. Bug: chromium:957519 Change-Id: Id836d6df63448c7d62845d3f47e2acb9b254ddf3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4202875 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 54f44639 2023-01-17T13:07:57 Vulkan: Make RendererVk only have one CommandQueue object Right now RendererVk have two CommandQueue objects: one owned by RendererVk (used for synchronous submission) and another owned by CommandProcessor (used for async submission). Since async submission is a feature flag that will never change once RendererVk initialized, we are only using one CommandQueue. This CL changes CommandProcessor's mCommandQueue to a pointer that points to RendererVk::mCommandQueue. The added benefit of this is that it allows me to remove bunch of CommandQueue property query APIs from CommandProcessor since these property has nothing to do with "command". CommandProcessor class is actually reduced to command processing. Bug: b/266605181 Change-Id: I1f33db14ee29e2c0aa7850de98b2d7c3823126b6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4174874 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev ef0fe638 2023-01-16T00:00:00 Implement EXT_polygon_offset_clamp * Added polygonOffsetClamp to the RasterizerState * Adjusted State::setPolygonOffsetParams * Added PolygonOffsetClampTest end2end tests * Added StateChangeTestES3.PolygonOffsetClamp test * Suppressed the affected dEQP test as it has a bug Capture * Updated serialized rasterizer state * Updated CaptureMidExecutionSetup OpenGL * Rely on the EXT extension defined both for desktop and ES contexts * On desktops, might as well use the ARB extension or GL 4.6 once ANGLE supports them D3D11 * Requires FL10_0 or higher * Maps to D3D11_RASTERIZER_DESC.DepthBiasClamp * Drive-by cleanup of extensions init code Vulkan * Requires depthBiasClamp physical device feature * Maps to the depthBiasClamp parameter of the vkCmdSetDepthBias command Metal * Maps to the clamp parameter of the setDepthBias command Bug: angleproject:7957 Change-Id: If6b28df4084f0a81db29f75fb434e75d394c8730 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4169945 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Charlie Lao 9a72a98e 2023-01-19T13:17:42 Vulkan: Fix the VVL error for shaderRead to shaderRead barrier When we use image from fragment shader read to vertex shader read, we detect the case (same layout with only shader stage change) and just merge the barrier into one. But that can only done if these two usages are for the same render pass. If it is different render pass, then you still have to issue a new barrier. Previously there is no way to detect that the barrier was issued for which render pass. With the fix in crrev.com/cl/4136948, we now know which render pass issued the last barrier. With that we are able to limit the shader stage consolidation only if they are for the same render pass, thus fixing the VVL errors. Bug: angleproject:6663 Change-Id: I3d884336e8cf1f3cf16fc3e5a3423357ae2ed3c1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4182542 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 13aee254 2023-01-13T14:01:56 Move memory allocation info vars to separate class * Moved the RendererVk variables related to memory allocation to a new class, MemoryAllocationTracker. * Note: The existing variable "mMemoryAllocationTracker" has been renamed to "mMemoryAllocationRecord" to avoid confusion. * Added a custom locale using the class MemoryLogNumberFormat, since the original method did not include formatting on some Android devices. Bug: b/262029018 Change-Id: I23acf37119da02e6430de6b5d360307982ecf9bb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4174738 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ivan Neulander <ineula@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Charlie Lao 77d19e39 2023-01-11T14:03:18 Vulkan: Add ThreadSafeCommandQueue class This is preparation CL for the next few CLs. Instead of having RendererVk owns mCommandQueueMutex and takes lock before calling CommandQueue APIs, this CL creates a ThreadSafeCommandQueue wrapper class that wraps CommandQueue class' public APIs with a mMutex. Right now this is purely a mechanical change, expecting no real functional or behavior differences. But in the future CLs, we are going to implement some APIs without holding lock while doing the wait. This also conceptually cleaner that a mutex lock should protect data not methods. Because of this, this CL also adds OneOffCommandPool class to wrap around all oneoff command buffers with its own lock. The same change also applied to CommandProcessor class by adding a ThreadSafeCommandProcessor class (this will be removed in later CLs). This CL also removes CommandQueueInterface base class and made all these virtual functions no longer virtual, thus reduces the overhead associate with calling virtual functions. Bug: b/261106868 Change-Id: Ifdc0085cef7f00d840b4ef3fa602172fed3c0fb1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4156637 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi ffbb65bc 2022-11-28T13:31:48 Vulkan: Use VK_EXT_swapchain_maintenance1 for present fences Bug: angleproject:7878 Change-Id: Ic3a43c663789a6489cff261848d9ad4a408ca53a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4088905 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com>
Amirali Abdolrashidi 48e40ef6 2023-01-06T13:35:21 Add per-heap memory allocation trackers * For each member of MemoryAllocationType, we now have a per-heap counter to keep track of the allocation size in each available heap. * mActivePerHeapMemoryAllocationsSize * mActivePerHeapMemoryAllocationsCount (debug mode only) * Added the memory type index to onMemoryAlloc() and onMemoryDealloc() as an input. It can then be used to determine the used memory heap index for that allocation using the memory properties defined in the renderer. * checkForCurrentMemoryAllocations() will now log the heap index of the current memory allocations in debug mode and during an OOM crash. * logPendingMemoryAllocation() will now log the heap index of the pending allocation during an OOM crash. * Renamed constexpr values used for tracking for more consistency. * kTrackMemoryAllocation -> kTrackMemoryAllocationSizes * kDebugMemoryAllocationLogs -> kTrackMemoryAllocationDebug Bug: b/262029018 Change-Id: I178a3556b3107edc0c72c6b23ea2f2d6b12da947 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4149431 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Ivan Neulander <ineula@google.com>
Shahbaz Youssefi 2550fe9a 2023-01-14T21:21:24 Vulkan: Drop usage of VK_EXT_debug_report This extension has been deprecated for 6 years in favor of VK_EXT_debug_utils. Bug: angleproject:7959 Change-Id: I51923a6821a6a18854ef94e0ca85c328bc8c6da5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4167833 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 669e232a 2023-01-17T15:25:27 Revert "Suppress more VVL errors about vkCmdDraw*-None" This reverts commit 0d34d4f8810aeb2297bf2814f8b1ca7f749decd9. Reason for revert: Fixed upstream https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/4628 Original change's description: > Suppress more VVL errors about vkCmdDraw*-None > > * Suppressed the following VVLs: > * VUID-vkCmdDrawIndexed-None-02686 > * VUID-vkCmdDrawIndirect-None-02686 > * VUID-vkCmdDrawIndirectCount-None-02686 > * VUID-vkCmdDrawIndexedIndirect-None-02686 > * VUID-vkCmdDrawIndexedIndirectCount-None-02686 > > Bug: angleproject:7685 > Change-Id: I41390ee2a2a01509367a6e98697da3ad7e3cc2e5 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3910174 > Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> > Commit-Queue: Yuly Novikov <ynovikov@chromium.org> > Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Bug: angleproject:7685 Change-Id: Ibc79b34758a18ea0070edff4f200b7f8462c8e9b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4174173 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi 598b4824 2023-01-13T11:12:07 Vulkan: Broaden more syncval suppressions The specificity of syncval error messages turned out to cause more churn than good, with development in syncval changing the messages. Recently, some messages with ..._STORAGE_READ were changed to correctly output ..._SAMPLED_READ, which caused a lot of the messages to no longer match. This change broadens the syncval suppressions to make it not sensitive to the above change, but also removes some other unnecessary details. Bug: angleproject:7949 Change-Id: Ie834205e24dcde36637300c281aa1a18330e9517 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4162737 Reviewed-by: Jamie Madill <jmadill@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 3f5fcf15 2023-01-11T16:52:28 Vulkan: Make feedback loop syncval suppressions more general Bug: angleproject:7949 Change-Id: Ife0f7fb2692115874b32d4c1e7a8e505cdc614ac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4158511 Commit-Queue: Jamie Madill <jmadill@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 3422358b 2023-01-11T00:17:04 Vulkan: Unsuppress fixed VUs Bug: angleproject:5331 Change-Id: I0e42c157a4b14ab1309716c9f5432c664785cf28 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4153779 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Amirali Abdolrashidi 3a152dc7 2023-01-06T10:47:37 Clean up the memory allocation info log output * For more readability, number formatting is added to memory size info using stringstream::imbue(std::locale()). * For more conciseness, removed the redundant heap budget info. (No longer VK_MAX_MEMORY_HEAPS) * Flags are updated to be logged in hex format. * Changed the order of heap stats, so heap budget and usage numbers are logged immediately after the available heaps. Bug: b/262029018 Change-Id: I309bd43e7a236629308ae23320606122f29584a3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4143979 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>
Shahbaz Youssefi ecda6664 2023-01-11T00:20:03 Vulkan: Unsuppress fixed VU Bug: angleproject:2796 Change-Id: I5e0975c7eef192a9d3a33490f777ea448dcb8884 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4153780 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Jamie Madill 173db16f 2023-01-11T13:52:17 Revert "Vulkan: Temporarily disable threaded monolithic pipelines." This reverts commit 69c68ea8d84b8cad4edd54fb81ba3f0d781a9aae. Reason for revert: Causes more crashes. Original change's description: > Vulkan: Temporarily disable threaded monolithic pipelines. > > These have a multithreading error. See issue for details. > > Bug: angleproject:7369 > Bug: angleproject:7944 > Change-Id: Icbb5e1eb7b026568fa3898d5a94bffd0186fa494 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4153011 > Reviewed-by: Roman Lavrov <romanl@google.com> > Commit-Queue: Jamie Madill <jmadill@chromium.org> Bug: angleproject:7369 Bug: angleproject:7944 Change-Id: I76f35ee4c405dd634d3c0cbdc98b60e140dbaa55 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4155852 Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Auto-Submit: Jamie Madill <jmadill@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Shahbaz Youssefi 146defd2 2023-01-11T05:08:30 Revert "Suppress VUID-VkGraphicsPipelineCreateInfo-pStages-06896." This reverts commit 992018c7bd18ed7fc4ab1220a511de7d36dbd764. Reason for revert: Fixed upstream Original change's description: > Suppress VUID-VkGraphicsPipelineCreateInfo-pStages-06896. > > Bug: angleproject:7513 > Change-Id: I2877c069e33d2ec5e92cf759dc3ab1d270e1a414 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3776759 > Reviewed-by: Charlie Lao <cclao@google.com> > Commit-Queue: Roman Lavrov <romanl@google.com> Bug: angleproject:7513 Change-Id: I562081b24b92e493649fa13ead4d56673ab46102 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4153137 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Roman Lavrov <romanl@google.com>
Jamie Madill 69c68ea8 2023-01-10T15:35:47 Vulkan: Temporarily disable threaded monolithic pipelines. These have a multithreading error. See issue for details. Bug: angleproject:7369 Bug: angleproject:7944 Change-Id: Icbb5e1eb7b026568fa3898d5a94bffd0186fa494 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4153011 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Cody Northrop a0939325 2023-01-01T17:41:33 Tests: Add Catalyst Black trace Test: angle_trace_tests --gtest_filter="*catalyst_black*" Bug: angleproject:7921 Bug: angleproject:7924 Change-Id: I626d6790ef602f3ca09c9c9a4e03c5df32a985ba Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4133886 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 6c41793f 2022-12-20T15:20:50 Vulkan: Use read/write depth/stencil layouts This allows an application to have depth in read-only feedback loop while stencil is being written to for example. Bug: angleproject:7899 Bug: b/192477489 Change-Id: Ic2e11d32da7c7e3a7f3cd86dbafc5c56a0dbbfd7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4116730 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 216cd10b 2022-12-22T11:29:35 Vulkan: Dsiable enableAsyncPipelineCacheCompression There was intermittent failure on bots due to this. Re-disable it for now. Bug: b/246683126 Change-Id: Iba5c0bcacb87336d187b952b47804885ce569f6d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4120245 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 301ed545 2022-12-20T20:16:22 Vulkan: Pass context to layout getters In preparation for a change that optionally uses read/write depth/stencil layouts. Context is used to test for the supportsMixedReadWriteDepthStencilLayouts feature to know whether those layouts are supported or that a fallback must be chosen. Bug: angleproject:7899 Bug: b/192477489 Change-Id: I1453dc9d060453a3806ad0f261b94368fe01fb29 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4116735 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao d6dea33b 2022-12-19T13:39:34 Vulkan: Remove CommandQueue::mGarbageQueue With recent work of per active context queue serial, mGarbageQueue behaves almost identical to normal mSharedGarbage now. This CL removed mGarbageQueue and added garbage into Remove mSharedGarbage instead. Bug: b/263166501 Change-Id: I6bce47b4535283e7bd0f0c8823b9629cc25f9d94 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4117712 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Amirali Abdolrashidi cd540095 2022-12-12T13:13:14 Vulkan: Add memory log at allocation error * Added logging memory allocation information in handleError() in the event of an error from ANGLE_VK_TRY. * Used for the handleError() in ContextVk. * Updated the name and message of the function to log allocations. * checkForCurrentMemoryAllocations() * Added logging memory heap stats, including budget and usage. * logMemoryHeapStats() * In the renderer, added the feature flag indicating whether the platform supports the memory budget extension. * Uses VK_EXT_memory_budget. * Added the enum class MemoryLogSeverity, which is used to select the severity level of the memory log. * Added logging pending memory allocation information. * logPendingMemoryAllocation() * If the last unsuccessful memory allocation was unsuccessful, its information will be added to the log. Bug: b/262029018 Change-Id: I97343c1553936aed23d763f3e0c00d495f9ee810 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4089531 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Kaiyi Li <kaiyili@google.com>
Shahbaz Youssefi ea36cf1c 2022-12-19T09:55:45 Vulkan: Feature for VK_EXT_rasterization_order_attachment_access This change just adds the feature. A follow up change will actually start using the extension. Bug: angleproject:7899 Bug: b/192477489 Change-Id: I19c078ebe57a7819b3aa3e95d4436cefa34ba85b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4113912 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 1a8bcbda 2022-12-17T20:12:41 Vulkan: Re-enable async pipeline cache sync by default This is a reland of c7414946b84410bfcc8705759a902577c13d9fc4 The change here is that the program, shader and blob caches are now reset _after_ the backend is torn down. Otherwise the pipeline cache sync thread's use of the caches races with that. Bug: b/246683126 Change-Id: Ifc3d67279de50a2ee2866476aa5df85d4c10d30d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4111972 Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 40c17b58 2022-12-13T15:35:23 Vulkan: Move SPIR-V transform to vulkan/ No longer used by metal/. Bug: angleproject:7220 Change-Id: Idb3a6369fefbcf87e7993daa652c8702ec53c20f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4104002 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 77c95de4 2022-11-16T21:12:28 Vulkan: Threaded monolithic pipeline creation With this change, once a pipeline is created out of libraries, a task is scheduled (if necessary) to asynchronously create a corresponding monolithic pipeline. Once the task is complete, the linked pipeline handle is replaced by the monolithic one, gaining back any performance that might have been lost due to the use of libraries. Bug: angleproject:7369 Change-Id: I525fb1e09f8bedc61b9dbef19f9cce7026ff9c53 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4031151 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Amirali Abdolrashidi 684ff60b 2022-06-21T10:52:31 Vulkan: Add shared ring buffer cmd alloc feature * Added RingBufferAllocator.cpp with implementation. * Main classes: * RingBufferAllocator (fast allocation with bulk deallocation) * SharedRingBufferAllocator (wrapper to help with shared use and multiple threads) * Implemented "angle_enable_vulkan_shared_ring_buffer_cmd_alloc" feature. (Disabled by default) * Details (from the original CL) * The angle::PoolAllocator replaced with angle::RingBufferAllocator. * Before, there was separate angle::PoolAllocator per each CommandBufferHelper. Now, a single angle::RingBufferAllocator is shared between multiple CommandBufferHelper objects. * Commands data from multiple CommandBufferHelpers is tightly packed without fragmentation. * Significantly less memory overhead, observed with enabled async queue. * Moved the parts of the code related to the allocators into the classes in the new AllocatorHelperPool and AllocatorHelperRing files for better management. The allocator can be switched by changing the following BUILD flag: `angle_enable_vulkan_shared_ring_buffer_cmd_alloc` * It is connected to the following macro: ANGLE_ENABLE_VULKAN_SHARED_RING_BUFFER_CMD_ALLOC * The two main allocator classes in each file are aliased as: * SecondaryCommandBlockAllocator (in CommandBufferHelper objects) * SecondaryCommandBlockPool (in SecondaryCommandBuffer) * Also added placeholder functions for VulkanSecondaryCommandBuffer. * Added descriptions regarding the two allocators. * renderer/vulkan/doc/Allocators.md Credit: Original CL authored by Igor Nazarov <i.nazarov@samsung.com> Bug: angleproject:6401 Bug: b/256666069 Change-Id: I0f24793eef6334bf4ff8e327b9665338807dad37 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3715968 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 6830b7d3 2022-11-23T11:51:28 Vulkan: Use finishQueueSerial for queueSubmitOneOff Right now for oneoff submission we are creating a fence and pass in the fence and then wait for fence outside the normal wait code path. This creates a problem that the command buffer and garbage clean up code does not gets run and may end up hitting assertion. This might be necessary before because complication with ResourceList. With recent work that removes ResourceList, this can be much simpler now. This CL removes the fence creation and wait in the oneoff submission code path (except the external fence) and switch to finishQueueSerial call. Bug: b/255414841 Change-Id: I2b16c187becbda9c2397685c7212abac994e8dc2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4053261 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi db9ffea3 2022-12-08T22:08:51 Vulkan: Remove the unused shadowBuffer feature Bug: angleproject:4339 Change-Id: I4f4524ba597af25bd6da3792bd7a85ae1b52962e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4089448 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 1193b664 2022-10-11T01:00:40 Vulkan: Use VK_EXT_pipeline_protected_access This extension allows pipelines to be restricted to protected or unprotected command buffers only. Bug: angleproject:7714 Change-Id: Id07be4c2ffd7ca19b8b4a2a869828bc11e89e467 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3943535 Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 7e378da9 2022-12-01T16:36:08 Vulkan: Remove synchronous commands from CommandProcessor Some command tokens in CommandProcessor are doing synchronous calls. For example, finishResourceUse() and waitIdle(). They are inserting a token and then wait for CommandProcessor to drain. This CL removes these commands from CommandProcessor and it just ask CommandProcessor to drain and then call into mCommandQueue to finishResourceUse or waitIdle. This is a minor clean up for now, but in future CL we will also avoid waitForWorkComplete if the mUse has already been drained from CommandProcessor. Bug: b/261098465 Change-Id: I7672a9c0b1e477ea3537652cd83350aa97f7caa7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4072223 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Yuly Novikov 81a3c71e 2022-12-01T18:51:39 Enable tests on Win Intel Optiplex 7080 experimental bot Suppress failing end2end tests and run single process Suppress VUID-VkDescriptorImageInfo-imageView-06711 Bug: chromium:1349828, angleproject:7874 Bug: angleproject:7865, angleproject:7866, angleproject:7872 Change-Id: I18c9099af6635cf41f5368960dc1d35d9decc48c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4071925 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Amirali Abdolrashidi 982755e0 2022-12-05T15:32:42 Suppress VUID-vkCmdDraw-None-06887 * Suppressed the following VVLs: * VUID-vkCmdDraw-None-06887 * VUID-vkCmdDrawIndexed-None-06887 Bug: angleproject:7861 Change-Id: I15cdf934bd87b5d5219e69eebc9d339d4c180660 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4082149 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 3b57c2a8 2022-12-05T15:33:43 Add cmnt for VUID-vkDestroySemaphore suppression Bug: angleproject:7729 Change-Id: I46d8afe9702b9263a776e9acfa9a3364b7184579 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4080592 Reviewed-by: Ian Elliott <ianelliott@google.com> Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Shahbaz Youssefi 650f2274 2022-12-02T15:51:09 Vulkan: Remove fixed VVL errors Bug: angleproject:7338 Change-Id: I4d2b05c5fd5ad505fda2089dbfa2119e8db8ac16 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4076515 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Amirali Abdolrashidi 58d7ace2 2022-11-22T16:08:07 Vulkan: Add memory allocation log support in debug * Added a memory tracker to the renderer object to keep track of the memory allocations and deallocations in more detail. * This feature is used for debugging only. * To enable it, set angle_enable_memory_alloc_logging=true in GN args (added in renderer/vulkan/BUILD). * It is related to ANGLE_ENABLE_MEMORY_ALLOC_LOGGING in the code. * The tracker are updated in the memory allocation tracking functions if the feature is enabled. (The counter is always updated, even if the feature is disabled.) * At the end of a RendererVk object, it checks for and logs any remaining allocated memory from MemoryAllocationType members. * The data is stored in the map object "mMemoryAllocationTracker". The key used for it is currently of type angle::BacktraceInfo. * If angle_enable_unwind_backtrace_support is disabled, or not on Android, the key is an empty object. * MemoryAllocInfoMapKey is used as a key to access the allocation information. Bug: b/242641395 Change-Id: If701a4bdea2f8738a830ee47e0c7c5cdacf95b87 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4050103 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 2e5ca217 2022-11-18T10:44:49 Vulkan: Let each current context has its own QueueSerial. This CL makes every current context has its own queueSerial. At context creation time or when context becomes current, it allocates a QueueIndex from renderer. When it becomes non-current, it releases QueueIndex for others to reuse. This way we significantly reduces the max number of QueueIndexs for reasonable usage. Each CommandBuffer has its own unique QueueSerial and we use that to determine if a resource is being used by the given CommandBuffer. The QueueSerial for RenderPassCommands is deferred until renderPass starts, and when we generate queueSerial for renderPassCommands, we also reserve a range of serials for outsideRenderPassCommands so that we can do incremental submission of outsideRenderPassCommands without need to close renderPassCommands. In rare situation, if that reserved serials runs out, we also close renderPassCommands to ensure the ordering of serials matches ordering of command buffers. With per current context queue serial, this CL is able to set resource queue serial as it is being used. This CL completely removes usage of ResourceUseList class since it was introduced due to deferred setSerial. This CL also get rid of refCount from ResourceUse since there we no longer add it to a ResourceUseList. With that, we also able to remove SharedResourceUse class since access to ResourceUse itself is now thread safe since we are able to make a copy of it when we add it to GarbageList. Because RenderPassCommands now has its own unique QueueSerial as it encodes command, we can use it to detect if a resource is being used by it or not, thus this CL also removes usage of CommandBufferID. Bug: b/255414841 Change-Id: I36dcbeaa7bc996f04e6c04bf9ad44cd0d630f61a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4038096 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Solti Ho 7e1ed5f1 2022-12-02T02:32:40 Revert "Vulkan: Enable async pipeline cache sync by default" This reverts commit c7414946b84410bfcc8705759a902577c13d9fc4. Reason for revert: b/260752276 Original change's description: > Vulkan: Enable async pipeline cache sync by default > > Bug: b/246683126 > Change-Id: I593650364250f8802e9f546ab9957cf1c30e596a > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4031487 > Reviewed-by: Cody Northrop <cnorthrop@google.com> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/246683126 Bug: b/260752276 Change-Id: I0ebac7e46e213790ac39e4124e89feda76551011 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4074765 Commit-Queue: Solti Ho <solti@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>