src/libANGLE/renderer/vulkan


Log

Author Commit Date CI Message
Yuxin Hu a625043f 2025-04-01T16:09:14 Vulkan: Remove VVL error skips that have been fixed Bug: angleproject:42265220 Change-Id: Ia2048817c6238031c83aaa237c6c88b0e9a9ebf9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6423550 Auto-Submit: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov 23c1e11e 2025-04-01T11:27:02 Disable platform trace events by default, except Chromium build Observed overhead in perf builds is too significant, some workloads generate thousands of events per second. There does not seem to be a simple way to get around the overhead - it could be somewhat reduced but the event rate is just too high. ANGLE_TRACE_EVENT*(...) etc become a no-op by default. Can be re-enabled with angle_enable_platform_trace_events=true gn arg Bug: angleproject:404542398 Change-Id: I8d7363ee28d22226f1860e24f2399bb4129cfb84 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6419308 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Feels: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Amirali Abdolrashidi bbf92d12 2025-03-21T12:43:14 Vulkan: Add workaround flag for extra submit fence This change is a workaround for some devices exhibiting a device-lost error related to the fence usage in the command batches when working with EGL sync objects, such as a cycle similar to below: - <Some GL work> - eglCreateSyncKHR() - glFlush() - eglDupNativeFenceFDANDROID() - eglDestroySyncKHR() - <More GL work> (The exact point of error and the reason for the device-lost remain unknown.) This change is meant to mitigate such errors on those devices if needed. However, for the rest, the feature will remain disabled. * Added a new feature flag: enableExtraSubmitFence * Modified the usage of mFence in CommandBatch * It is also used when enableExtraSubmitFence is enabled, even if there is an external fence. * When there is an external fence, this object is used to create an empty submission after the primary commands are submitted using the external fence. * Added the config to enable EnableExtraSubmitFence for the following suite: EGLSyncTest Bug: b/384477641 Change-Id: I05f8bdcc804967c4984416af802326d22afd7a46 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6378778 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao ecc378cc 2025-03-03T16:43:33 Reland "Dont use Subject/Observer for SwapchainImageChanged" This is reland of the following CL https://chromium-review.googlesource.com/c/angle/angle/+/6319893 Because we do deferred ANI (VkAcquireNextImage) call until image is needed, we need a way to force Context to go through FramebufferVk::syncState call (FramebufferVk::syncState calls WindowSurfaceVk::getAttachmentRenderTarget, which end up calling ANI. Right now we uses subject/observer mechanism, by sending angle::SubjectMessage::SwapchainImageChanged to all observers of WindowSurfaceVk. In this case it is egl::Surface. Then eglSurface redirects this message to its observers, which are all gl::Framebuffer's attachments: color, depth, stencil. Even though only color attachment needs to be notified, but because we don't have a separate list of observers, depth/stencil attachment also receive the notification and they early out. Then gl::Framebuffer sets DIRTY_BIT_COLOR_BUFFER_CONTENTS_0 dirty bit and send the angle::SubjectMessage::DirtyBitsFlagged to Context, which dirty DrawFBO and ReadFBO and dirty cached state. Note that this is specific for swap image changed case, there is no surface property change (surface property change will still trigger the subject/observer message with SubjectMessage::SubjectChanged message, but this occurs rarely). This gets worse for apps that uses multiple contexts, for the example pokemon_masters_ex has three contexts, each context has its own default frame buffer that attach to the same surface, and we never remove non-current context from the observer list. This end up with egl::Surface has 12 observers and for every frame, it loop over the list of 12 observers and send message (virtual function call) to each of them. Color attachment also ends up sending two messages to Context, one for Read FBO and another for Draw FBO. There are total 21 virtual function calls. Even for single context usage, you have 6 virtual function calls, for every frame. EGL spec says "an EGLSurface must be current on only one thread at a time", any other context must call EGLMakeCurrent in order to use this surface, which will add all necessary dirty bits at that time. So we really only need to notify current context. In this CL, SwapchainImageChanged no longer uses subject/observer mechanism, so this message is removed. This CL still uses subject/observer mechanism to send DirtyBitsFlagged from Framebuffer back to context. We could call setDrawFramebufferDirty and setReadFramebufferDirty directly, but that will require to remove the "const" decoration out of gl::Context which generates too much code diff, so onStateChange(angle::SubjectMessage::DirtyBitsFlagged) is still used. Bug: angleproject:400711938 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6319893 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Change-Id: I017b0e8934b5194a520828fa5c4af1d6e3ef9aac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6404621
Yuxin Hu eb8deecd 2025-03-28T14:03:50 Remove VVL error skips that have been fixed Bug: angleproject:42265220 Change-Id: I1588db6ec2846faf92eef9042ba483547c0f5127 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6410511 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Robic Sun 7fb1ac40 2025-03-10T20:28:56 Support EGLImageTargetTexture2DOES + GenerateMipmap According to the spec, If an application adds mipmap levels to a texture originally created with EGLImageTargetTexture2D, OpenGL will allocate new memory for the updated texture, copying existing data, including from the EGLImage source. So, relevant support is added. Bug: angleproject:405840226 Change-Id: I4495df2d8ee1e18b4482808a290dcd861ef85b77 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6335305 Auto-Submit: Robic Sun <Robic.Sun@arm.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Igor Nazarov 8cf89716 2025-03-14T20:17:07 Vulkan: Remove perFrameWindowSizeQuery feature Feature was enabled for all platforms in order for surface to be resized before acquire next image (not only after swap). Remove it, as if it's always enabled to simplify the code. Bug: angleproject:397848903 Bug: angleproject:42262287 Bug: angleproject:42262286 Bug: angleproject:40096601 Change-Id: I768772e30f5f38f68992e5b82c84430732aa77d9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6354166 Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu e4bfa483 2025-03-27T10:54:19 Remove VVL error skips that have been fixed Bug: angleproject:42265220 Change-Id: I9d6cb7ee4ace27cad5ef3db84d83ded6ca9095f8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6404613 Auto-Submit: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Igor Nazarov 081934f6 2025-03-12T15:22:31 Vulkan: Add avoidInvisibleWindowSwapchainRecreate feature There is a bug on some NVIDIA drivers on Linux X11 when `vkAcquireNextImageKHR()` constantly returns `VK_ERROR_OUT_OF_DATE_KHR` if recreate the swapchain while window is not visible. If not recreate the swapchain after window resize - nothing happens, acquire and present works without errors. But if recreate the swpahchain to the `VkSurfaceCapabilitiesKHR::currentExtent` the next `vkAcquireNextImageKHR()` will return `VK_ERROR_OUT_OF_DATE_KHR`. ANGLE will retry to recreate the swapchain one more time and fail the call. Enabling the "avoidInvisibleWindowSwapchainRecreate" feature will avoid swapchain recreation when window size changes while it is not visible. Test: angle_end2end_tests --gtest_filter=EGLSurfaceTest.ResizeInvisibleWindow/* Bug: angleproject:397848903 Bug: angleproject:42264022 Bug: angleproject:42263074 Change-Id: I48588bf467d15c0e84b923092e06a42c22084dcc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6348739 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov caf14998 2025-02-25T17:28:05 Vulkan: Fix window surface resize and size query Added `mSizeState` enum member. When it is not `Resolved`, surface size is not yet resolved and may change any time in response to native window resize. Otherwise, surface size is resolved and will not change until next swap. Updated `getUserWidth()`/`getUserHeight()` methods. They return current window size when surface size is not resolved, or current surface size, otherwise. Window size is queried either by `getCurrentWindowSize()`, when surface is sized by swapchain, or by querying vulkan surface capabilities. The "perFrameWindowSizeQuery" feature controls when `mSizeState` is updated. Initially it is not resolved. Marked as not resolved in `invalidateSwapchain()`, and in `deferAcquireNextImage()` when the feature is enabled. It is marked as resolved after swapchain is created when feature is disabled, or in `AcquireNextImageUnlocked()` function after acquire next image, otherwise. Enabled some tests that were previously failing. Replaced old resize tests with new versions. Test: angle_end2end_tests --gtest_filter=EGLSurfaceTest.Resize*/* Bug: angleproject:397848903 Bug: angleproject:373659619 Bug: angleproject:153329980 Bug: angleproject:42266013 Bug: angleproject:42265843 Bug: angleproject:42265529 Bug: angleproject:42264022 Bug: angleproject:42263074 Bug: angleproject:42261800 Bug: angleproject:40096826 Change-Id: I3ad836960a68229fab6c94624022f1a0aaf2c3e5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6300645 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com>
Igor Nazarov e44357c6 2025-03-25T15:50:15 Vulkan: Do not defer ANI in shared present mode Calling ANI in shared present mode is not necessary after the initial acquire. Skip calling `deferAcquireNextImage()` in that mode. For code simplicity and as a preparation for (anglebug.com/400711938), the `invalidateSwapchain()` method is now also defers ANI and notifies `SubjectMessage::SurfaceChanged` to the parent class. `Framebuffer` message handling was updated to also reset color buffer dirty bit and to notify `SubjectMessage::DirtyBitsFlagged` if needed, as in the `SubjectMessage::SwapchainImageChanged` message case (which will be removed in future CL). This way, single `SubjectMessage::SurfaceChanged` message is enough to handle swapchain recreate. The `VK_SUBOPTIMAL_KHR` is no longer treaded as OUT_OF_DATE when in shared present mode. Added for consistency (since we are already skipping "perFrameWindowSizeQuery" checks), to preserve content, and to match the Android native GLES driver behavior. Call `invalidateSwapchain()` when swapchain operations fail to avoid repeated swapchain use and to be able to recover from the error. The `checkForOutOfDateSwapchain()` was split into two methods: - checkForOutOfDateSwapchain(): - Called only after present. - Checks present out of date result and present mode compatibility. - Invalidates the swapchain and updates the present mode if the above checks fails. - prepareSwapchainForAcquireNextImage(): - Calls `queryAndAdjustSurfaceCaps()` and `recreateSwapchain()` if swapchain is invalid. - Calls `queryAndAdjustSurfaceCaps()` and checks surface properties when "perFrameWindowSizeQuery" is enabled. Then calls `recreateSwapchain()` if something changed. Other changes: - The `prepareForAcquireNextSwapchainImage()` method was replaced with `prepareSwapchainForAcquireNextImage()`. - Removed `doDeferredAcquireNextImageWithUsableSwapchain()` and `postProcessUnlockedAcquire()` methods because of redundancy. - Move image invalidation code into `acquireNextSwapchainImage()` to make `doDeferredAcquireNextImage()` simpler. - Convert `resizeSwapchainImages()` into `createSwapchainImages()` for simplicity. Updated old and added new tests. Test: angle_end2end_tests --gtest_filter=EGLSurfaceTest.ReadFramebufferBindingSyncState/* Test: angle_end2end_tests --gtest_filter=EGLSingleBufferTest.OnCreateWindowSurface/* Test: angle_end2end_tests --gtest_filter=EGLSingleBufferTest.OnSetSurfaceAttrib/* Test: angle_end2end_tests --gtest_filter=EGLSingleBufferTest.WindowResize/* Test: angle_end2end_tests --gtest_filter=EGLSingleBufferTest.WindowRotation/* Bug: angleproject:400711938 Bug: angleproject:397848903 Bug: angleproject:42262606 Change-Id: I2247417aa8b7b5afc10a8420083aeb845895aec9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6387920 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Charlie Lao e339f91c 2025-03-21T10:22:59 Vulkan: Split asyncCommandBufferResetAndGarbageCleanup into two Right now this one feature flag controls garbage clean up and command buffer reset. If this is enabled, we are seeing command buffer reset some times runs on small core and some times gets blocked by mutex lock inside vulkan driver. This could take quite long while main rendering thread is blocked by ANGLE's CommandPoolAccess lock. This CL splits this feature flag into two separate feature flag: asyncGarbageCleanup controls garbage clean up in the async thread or not. asyncCommandBufferReset controls commandBuffer.reset in the async thread or not. This CL also disables commandBuffer.reset in async thread only on ARM given there is no data shows other GPUs suffer form the same problem. Bug: angleproject:378718508 Change-Id: Ice87b5b91568a0a95e0064da2b70243516ff6753 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6381893 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu f841d12a 2025-03-26T14:22:16 Remove VVL error skips that have been fixed Bug: angleproject:42265220 Change-Id: Ieb0638e3c28dd4dacaeebdcc45de381c994f4bdb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6397943 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Liza Burakova 5024ccef 2025-03-25T11:37:19 WebGPU: Emulate line loops with primitive restarts Bug: angleproject:383356846 Change-Id: Iab1d658cb3c5e32f88241f6757d1c2e5a84bf8ec Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6297524 Commit-Queue: Liza Burakova <liza@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Aurora Zhang 34db1c20 2025-03-20T12:56:42 Vulkan: glReadPixels should nearest sample the YUV render target Vulkan backend uses texture except texelFetch to obtain the YUV image value for glReadPixels. According to the chroma filter set in the image, it may apply LINEAR sampling. * Change this filter to NEAREST inside glReadPixels to get the correct pixel values. * Modify the fragment shader used in glReadPixels to make sure sampling from the center of the pixel. * Add a new end2end test. Bug: angleproject:404394628 Change-Id: I0e574a464639e11671f0a09eee3e9f38b5abd919 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6366299 Auto-Submit: Aurora Zhang <Aurora.Zhang@arm.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov 3cfc0ce2 2025-03-24T07:41:33 Revert "Vulkan:Dont use Subject/Observer for SwapchainImageChanged" This reverts commit 48103cb2f2b292cb50cc5a29546b358b2e47fd29. Reason for revert: assert fails https://ci.chromium.org/ui/p/angle/builders/ci/android-arm64-exp-test/7085/overview I 22:27:33.697 77.533s _RunTestsOnDevice(17221FDF6000A4) [ RUN ] EGLAndroidAutoRefreshTest.SwapCPUThrottling/ES3_Vulkan_NoFixture INFO:root:ERR: SurfaceVk.cpp:3165 (getCurrentFramebuffer): ! Assert failed in getCurrentFramebuffer (../../src/libANGLE/renderer/vulkan/SurfaceVk.cpp:3165): mAcquireOperation.state == ImageAcquireState::Ready Original change's description: > Vulkan:Dont use Subject/Observer for SwapchainImageChanged > > Because we do deferred ANI (VkAcquireNextImage) call until image is > needed, we need a way to force Context to go through > FramebufferVk::syncState call (FramebufferVk::syncState calls > WindowSurfaceVk::getAttachmentRenderTarget, which end up calling ANI. > Right now we uses subject/observer mechanism, by sending > angle::SubjectMessage::SwapchainImageChanged to all observers of > WindowSurfaceVk. In this case it is egl::Surface. Then eglSurface > redirects this message to its observers, which are all gl::Framebuffer's > attachments: color, depth, stencil. Even though only color attachment > needs to be notified, but because we don't have a separate list of > observers, depth/stencil attachment also receive the notification and > they early out. Then gl::Framebuffer sets > DIRTY_BIT_COLOR_BUFFER_CONTENTS_0 dirty bit and send the > angle::SubjectMessage::DirtyBitsFlagged to Context, which dirty DrawFBO > and ReadFBO and dirty cached state. Note that this is specific for swap > image changed case, there is no surface property change (surface > property change will still trigger the subject/observer message with > SubjectMessage::SubjectChanged message, but this occurs rarely). This > gets worse for apps that uses multiple contexts, for the example > pokemon_masters_ex has three contexts, each context has its own default > frame buffer that attach to the same surface, and we never remove > non-current context from the observer list. This end up with > egl::Surface has 12 observers and for every frame, it loop over the list > of 12 observers and send message (virtual function call) to each of > them. Color attachment also ends up sending two messages to Context, one > for Read FBO and another for Draw FBO. There are total 21 virtual > function calls. Even for single context usage, you have 6 virtual > function calls, for every frame. > > EGL spec says "an EGLSurface must be current on only one thread at a > time", any other context must call EGLMakeCurrent in order to use this > surface, which will add all necessary dirty bits at that time. So we > really only need to notify current context. In this CL, > SwapchainImageChanged no longer uses subject/observer mechanism, so this > message is removed. > > This CL still uses subject/observer mechanism to send DirtyBitsFlagged > from Framebuffer back to context. We could call setDrawFramebufferDirty > and setReadFramebufferDirty directly, but that will require to remove > the "const" decoration out of gl::Context which generates too much code > diff, so onStateChange(angle::SubjectMessage::DirtyBitsFlagged) is still > used. > > Bug: angleproject:400711938 > Change-Id: I61354516fd0aa307714b7abd30c6b6e45ff7b496 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6319893 > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Yuxin Hu <yuxinhu@google.com> Bug: angleproject:400711938 Change-Id: Ib7899d1ac63a1f86af0953a1d25922578c470fc9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6387755 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Jiaqi Li cbe26d0c 2025-03-04T16:56:26 Wrong texture coordinates sent to VULKAN for blit In ANGLE's Vulkan backend, complex blit operations are implemented using draw calls that utilize samplers and shaders, with texture coordinates passed via push constants. In this test case, texture coordinates are calculated based on the effective framebuffer size, which is determined by the smallest attachment dimensions. However, the draw call is executed on an attachment with its original size, leading to unexpected texture coordinates and incorrect sampling results. Use ReadImageExtent size instead of framebuffer effective size to calculate the sample texture coordinate. Bug: angleproject:400584608 Change-Id: I06f0a1e48463f36aef7189f772515561d2e752d1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6321348 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Jiaqi Li <Jiaqi.Li@arm.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 1166eec4 2025-03-20T02:02:50 Move TRACE_EVENT inside acquireNextSwapchainImage() The `acquireNextSwapchainImage()` is no longer called from surface initialize, which allows to move the trance event inside the function. Change also uses loop to handle repeated ANI retry instead of call duplication. This is done to further reduce code duplication in the next CL. Additionally, fixed assert that was missed in recently merged CL: Vulkan: Remove recreateSwapchain ContextVk dependency https://crrev.com/c/angle/angle/+/6298733 Bug: angleproject:397848903 Bug: angleproject:42261625 Change-Id: Iae2ce35018d4fe105430271b56804af8c74152c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6372565 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 48103cb2 2025-03-03T16:43:33 Vulkan:Dont use Subject/Observer for SwapchainImageChanged Because we do deferred ANI (VkAcquireNextImage) call until image is needed, we need a way to force Context to go through FramebufferVk::syncState call (FramebufferVk::syncState calls WindowSurfaceVk::getAttachmentRenderTarget, which end up calling ANI. Right now we uses subject/observer mechanism, by sending angle::SubjectMessage::SwapchainImageChanged to all observers of WindowSurfaceVk. In this case it is egl::Surface. Then eglSurface redirects this message to its observers, which are all gl::Framebuffer's attachments: color, depth, stencil. Even though only color attachment needs to be notified, but because we don't have a separate list of observers, depth/stencil attachment also receive the notification and they early out. Then gl::Framebuffer sets DIRTY_BIT_COLOR_BUFFER_CONTENTS_0 dirty bit and send the angle::SubjectMessage::DirtyBitsFlagged to Context, which dirty DrawFBO and ReadFBO and dirty cached state. Note that this is specific for swap image changed case, there is no surface property change (surface property change will still trigger the subject/observer message with SubjectMessage::SubjectChanged message, but this occurs rarely). This gets worse for apps that uses multiple contexts, for the example pokemon_masters_ex has three contexts, each context has its own default frame buffer that attach to the same surface, and we never remove non-current context from the observer list. This end up with egl::Surface has 12 observers and for every frame, it loop over the list of 12 observers and send message (virtual function call) to each of them. Color attachment also ends up sending two messages to Context, one for Read FBO and another for Draw FBO. There are total 21 virtual function calls. Even for single context usage, you have 6 virtual function calls, for every frame. EGL spec says "an EGLSurface must be current on only one thread at a time", any other context must call EGLMakeCurrent in order to use this surface, which will add all necessary dirty bits at that time. So we really only need to notify current context. In this CL, SwapchainImageChanged no longer uses subject/observer mechanism, so this message is removed. This CL still uses subject/observer mechanism to send DirtyBitsFlagged from Framebuffer back to context. We could call setDrawFramebufferDirty and setReadFramebufferDirty directly, but that will require to remove the "const" decoration out of gl::Context which generates too much code diff, so onStateChange(angle::SubjectMessage::DirtyBitsFlagged) is still used. Bug: angleproject:400711938 Change-Id: I61354516fd0aa307714b7abd30c6b6e45ff7b496 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6319893 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Yuxin Hu ac242c1a 2025-03-20T11:18:45 Vulkan: Fix the feature flag typo Bug: b/333987915 Change-Id: Iea21592532352d95c69c0cf8dfcad96b58563ec5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6377544 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Auto-Submit: Yuxin Hu <yuxinhu@google.com>
Yuxin Hu 6bd7a518 2025-03-19T13:35:48 Vulkan: Allow pipelineStatisticsQuery substitute PGO Some devices are missing VK_EXT_primitives_generated_query extension and primitivesGeneratedQuery (PGO) feature, which are required for GLES3.2 extensions geometryShaderEXT and tessellationShaderEXT. On such devices, when app requests to create a GLES 3.2 context, the eglCreateContext call will fail due to not able to support GLES 3.2. We add a new feature flag allowPipelineStaticsForPrimitivesGeneratedQuery, and enable it on devices where we can fallback to using pipelineStatisticsQuery (PSQ) as an approximation for VK_EXT_primitives_generated_query, to broaden support for GLES 3.2 contexts. This is an opt-in feature for vendors that can functionally substitute PGQ with PSQ. Expose geometryShaderEXT and tessellationShaderEXT extensions if allowPipelineStaticsForPrimitivesGeneratedQuery feature is enabled. Bug: b/333987915 Change-Id: I9f0affbc3cc383ed6c50bcfc5d4d6f7f8a708aaa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6362627 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: mohan maiya <m.maiya@samsung.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Mohan Maiya 05c491e1 2025-03-15T11:56:07 Vulkan: Optimize GraphicsDriverUniforms update Unless RP is closed there is no need to dirty GraphicsDriverUniforms when the program executable changes. Bug: angleproject:386749841 Test: VulkanPerformanceCounterTest.NoUpdatesToGraphicsDriverUniformsOnProgramChange* Change-Id: Id02e8a17de93e2b73103666fc6cc62ce3cdd8f43 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6358315 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu 5b5a5e21 2025-03-17T17:59:18 Reformat VVL error message part1 Remove the string entries from skipped VVL error message. TraceTest.manhattan_31 with SwiftShader no longer runs into VVL error, remove the corresponding comments. Bug: angleproject:316337308 Bug: angleproject:42265196 Change-Id: I113d2e7953b3f14ed9811df91204d046a5fe4fb4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6364335 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mavis Deng d668a13c 2025-03-14T17:18:18 Fix sync issue between XFB output and texture buffer input For the following scenario, where the first draw writes to the transform feedback buffer and the second draw reads from the same buffer as a texture buffer, it is necessary to end the render pass between the two draws and add a pipeline barrier. // xfb write to tex_buffer glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tex_buffer); glBeginTransformFeedback(); glDrawArrays(); glEndTransformFeedback(); // Draw with texture buffer tex_buffer glBindBuffer(GL_TEXTURE_BUFFER_EXT, tex_buffer); glTexBufferEXT(GL_TEXTURE_BUFFER_EXT, ..., tex_buffer); glDraw(); Bug: angleproject:403319685 Change-Id: I9381a336ce61dea696c93158bb617a41afcfc583 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6356070 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Mavis Deng <mavis.deng@arm.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Chris Dalton 292bb458 2025-03-14T12:17:49 Cut MAX_COLOR_ATTACHMENTS_WITH_ACTIVE_PIXEL_LOCAL_STORAGE_ANGLE Since the number of real devices that support framebuffer fetch, but do not support draw_buffers_indexed, is effectively zero, MAX_COLOR_ATTACHMENTS_WITH_ACTIVE_PIXEL_LOCAL_STORAGE_ANGLE is an unnecessary complication. These hypothetical devices can fall back on shader images or just not support pixel local storage at all. This closes the door for WEBGL_shader_pixel_local_storage to ever be implemented on top of the ES2 extension that inspired it all, EXT_shader_pixel_local_storage, but WebGL can just use framebuffer fetch instead, or maybe even EXT_shader_pixel_local_storage2 some day. This dramatically simplifies the WEBGL_shader_pixel_local_storage extension. Bug: angleproject:40096838 Change-Id: I9c51f2ce000620f883cb7917d4e8618c8e9ee803 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6354657 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app>
Shahbaz Youssefi fca3fed3 2025-03-18T11:06:10 Manual roll vulkan-deps from 552ac332629b to bf9998679aee (25 revisions) https://chromium.googlesource.com/vulkan-deps.git/+log/552ac332629b..bf9998679aee Also rolling transitive DEPS: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang/+log/0051b92b6fff2fd3dbc99b7dae316fa51a7f4767..8842cf92e3de290f275c46d55cbfe42b7d0775a6 https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools/+log/9e470ef0f95d6923fa19dc5c5dc48c1442eb5a8b..ba1359d203e544bd458373ba249a47c44e97b071 https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader/+log/8491f31d36a8c642e588220b89729129721fec31..54cbefd25dbcaeb2bb03da207afce6cad7fb5dd1 https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/74a6b7dc828078cf2f1524d3947f65a29a1562e9..b2c8bd421aa5c1502fd56c3c07fb2831a8ceb882 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://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: angleproject:404418769 Change-Id: I359e903e2d061b7bbde6b18d234d8927d2cca56c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6368274 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com>
Shahbaz Youssefi dae3c851 2025-03-14T11:44:53 Vulkan: Bake non-shader state into linked pipeline When using VK_EXT_graphics_pipeline_library, previously ANGLE would create three pipelines libraries: * The Shaders library was created based on the GL program's shaders + a few static states. This typically hit the program's own pipeline's cache that was warmed up during link. * The VertexInput and FragmentOutput libraries were created at draw time, which used the global pipeline cache At draw time, immediately after creating the non-Shaders libraries, the three libraries were linked into the final pipeline to be used by the draw call. This caused an inefficiency; because the non-Shaders libraries were created independently from the Shaders library, they had to be compiled pessimistically, for example because they could not be optimized to take into account the precision of the fragment shader's outputs or whether any value is const (typically alpha being set to one). Given the creation of VertexInput and FragmentOutput libraries is typically quite fast (the former being no-op and dynamic state anyway), this change removes the need for creating those libraries, and directly specifies the vertex input and fragment output state when creating the final pipeline out of the Shaders library. In this way, the same fragment output state can be tailored to the exact shaders it is being used with and incur a smaller overhead. In this change, the linked pipeline is cached in the GL program's pipeline cache, which is never synced to the blob cache as producing it is assumed to be fast already. Bug: angleproject:42265839 Change-Id: I8496ea37771555522bdc9de94043a1b56fa5967e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6354205 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com>
Igor Nazarov c935e06d 2025-02-24T20:13:46 Revert "Vulkan: Fix Wayland surface size queries" This reverts commit a277f1bce563999296620c29d83c760c0fb9763d. Reason for revert: No longer required, because `mIsSurfaceSizedBySwapchain` is always true on Wayland which will provide same behavior as the reverted override methods. It is also a preparation for the follow up change. Bug: angleproject:397848903 Bug: angleproject:40096815 Change-Id: If83ef133b422494d73565068e06e2d6a737f6315 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6298737 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov daaae2bd 2025-02-24T19:36:39 Vulkan: Remove surface caps query from createSwapChain This is mainly a refactoring with minor bug fixes. The `createSwapChain()` is called at initialize and at swapchain recreate. Before recreate there is always `queryAndAdjustSurfaceCaps()` call, which queries current surface sizes and min image count. However, surface capabilities may be queried again from `createSwapChain()` to get compatible present modes and the min image count. Problem is that surface caps `currentExtent` may change after the second query in the `createSwapChain()`, while the `extents` parameter is already calculated. Such situation will violate the specification. To eliminate the possibility of the above problem and to simplify the code, query of compatible present modes is moved to the `queryAndAdjustSurfaceCaps()`. To save performance, `mCompatiblePresentModes` is only updated if swapchain is already invalid (recreate is imminent). Function is now also handles `mEmulatedPreTransform` to further simplify the code. The `mSurfaceCaps` member was replaced with local variable. The `mIsSurfaceSizedBySwapchain` boolean is added instead to check it in the `getUserWidth()`/`getUserHeight()` methods. This also fixes a possible bug (anglebug.com/168327817) on Fuchsia when this expression could be false: mSurfaceCaps.currentExtent.width == kSurfaceSizedBySwapchain This is because previously `queryAndAdjustSurfaceCaps()` updated `mSurfaceCaps` with the values from `getCurrentWindowSize()`. It seems that the bug never happened on practice, otherwise the ASSERT in the same function would fail. The `prepareForAcquireNextSwapchainImage()` is used at initialize instead of `createSwapChain()` to remove code duplication. Fixed (anglebug.com/168327817) checking `mPreTransform` without enabled "enablePreRotateSurfaces" feature. Bug: angleproject:397848903 Bug: angleproject:168327817 Change-Id: I02e8e3b815b30350e12476853d8dcffed3fe7c38 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6298736 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov ac251fa8 2025-02-24T17:31:58 Vulkan: Remove doDeferredAcquireNextImage ContextVk dependency This is the continuation of the previous CL. After this change `lockSurface()` calls `doDeferredAcquireNextImage()` as the rest of the code do. The `ImageHelper::invalidateSubresourceContentImpl()` required `ContextVk` pointer before this change. The `ContextVk` is only used to print the performance warning when `layerIndex` exceed the maximum count, which is not possible in case of a `WindowSurfaceVk`. Added `layerLimitReachedOut` pointer instead of writing the warning. It is processed in `invalidateSubresource[Stencil]Content()`. Added `invalidateEntireLevel[Stencil]Content()` which do not require `ContextVk` to use in the `WindowSurfaceVk`. Bug: angleproject:397848903 Bug: angleproject:42264593 Change-Id: I58451a4818ad56fa196c3c971df3a5f7793f2bfe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6298735 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov 2f5a91ba 2025-02-24T17:25:10 Vulkan: Remove checkForOutOfDateSwapchain ContextVk dependency This is the continuation of the previous CL. After this CL it is now possible to call `prepareForAcquireNextSwapchainImage()` from `lockSurface()` that will also do necessary swapchain recreation in case of window resize. These methods required `ContextVk` pointer before this change: - RenderTargetVk::releaseImageAndViews() - replaced with `releaseSwapchainImage()` that does not release framebuffer because Window Surface framebuffers are not managed by the cache. - added `release()` method that does release the framebuffer. - WindowSurfaceVk::releaseSwapchainImages() - use `Renderer::collectGarbage()` instead of `ContextVk::addGarbage()`. - use `ImageHelper::releaseImage()` instead of `ImageHelper::releaseImageFromShareContexts()`. The `finalizeImageLayoutInShareContexts()` was not required since renderpass must be already ended, because swapchain recreate is only possible after present. Removal of `addToPendingImageGarbage()` is not going to cause OOM problems, because repeated swapchain recreate calls are not possible without swap (submissions). Bug: angleproject:397848903 Bug: angleproject:42264593 Change-Id: Iacfa3a144aa980659569b7100be25a44ebb9f0a0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6298734 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 3d96268d 2025-03-12T12:48:36 Vulkan: Fix dev mem report feature adding The Vulkan device feature flag for VK_EXT_device_memory_report is currently being queried from the physical device. However, the feature is not added to the device's list of enabled features. This can result in some devices not properly using the feature, e.g., showing 0s instead of the data. * Added the memory report feature flag (mMemoryReportFeatures) as an enabled feature before creating the device when one of the following corresponding ANGLE features are enabled: * logMemoryReportCallbacks * logMemoryReportStats Bug: b/380295966 Bug: angleproject:173636655 Change-Id: I7afad55e2582298ded75762f2cd666c05bb51f3d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6349539 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov e6a27504 2025-03-07T20:14:50 Vulkan: Swapchain recreate workaround for shared present mode On Android, `vkCreateSwapchainKHR` may return `VK_ERROR_NATIVE_WINDOW_IN_USE_KHR` if use `mLastSwapchain` as an `oldSwapchain` when in shared present mode. This happens on three different devices: SM-G996B (Mali-G78), SM-S921B (Xclipse 940), SM-S921U (Adreno 940). Bug: angleproject:397848903 Bug: angleproject:42262606 Change-Id: I1541c06c254f3e8231b165fb0c53eff5d810e8bd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6329488 Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 354a5463 2025-02-24T16:52:06 Vulkan: Remove recreateSwapchain ContextVk dependency In the upcoming change, swapchain will be invalidated in swap, while recreate deferred until ANI. After such invalidation, `lockSurface()` wold not be possible. Even that currently swapchain may be invalid only after previous recreate failure, this change adds `recreateSwapchain()` call into `lockSurface()` because it is now possible and as a preparation for the upcoming change. The `recreateSwapchain()` is split into `invalidateSwapchain()` and `recreateSwapchain()` methods. The invalidate must be called before the recreate. Bug: angleproject:397848903 Bug: angleproject:42264593 Change-Id: Ida4a98a985f9fbb527cdf8c81c088ae1210f409c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6298733 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov 79faadf7 2025-02-19T16:04:19 Vulkan: Simple WindowSurfaceVk refactoring Changes: - Update `ImageAcquireState` enumeration. - Make `getCurrentWindowSize()` const. Some implementations are now using local `surfaceCaps` variable instead of `mSurfaceCaps`, however this will not affect reset of the logic. - Remove `extentsOut` parameter from `createSurfaceVk()` and call `getCurrentWindowSize()` explicitly only when needed. - Remove `forceSwapchainRecreate` parameter since it is always has false as an argument. - Remove redundant `impl::` namespace. - Make `queryAndAdjustSurfaceCaps()` const. Bug: angleproject:397848903 Change-Id: I955be15fb4709e137f2ad8a165fd04a3fe626fbf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6298732 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Shahbaz Youssefi 5b343e8f 2025-03-11T11:35:08 Vulkan: Remove support for Stadia Bug: angleproject:42262714 Change-Id: Icae5fe828fe4e0bcd287d297df1bc586708ef86e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6344390 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Igor Nazarov 668a7a2e 2025-02-19T14:55:49 Revert "Vulkan: Return cached width and height for eglQuerySurface" This reverts commit db833869131eddb36e695717a823a540e3cdc8ba. Reason for revert: Native GLES driver behavior on Android is different from what was tested by "EGLPreRotationSurfaceTest.CheckSurfaceCapabilities" test. More precisely, behavior is different depending if native Window is resided using `ANativeWindow_setBuffersGeometry()` or resized by the user (screen rotation or resizing of a floating window). In case of `ANativeWindow_setBuffersGeometry()` resize (used by tests), surface will have size of the Window up until image is acquired (dequeued). In other words, size will be fixed after draw and will match current Window size until draw. In case of resizing by the user, surface size will be fixed until the next swap. This is the behavior that was tested by the reverted test. Bug: angleproject:397848903 Bug: angleproject:153329980 Change-Id: I8fc8d194c1591aff714dd255acd25392b4963e0d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6298731 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Yuxin Hu d62bc095 2025-03-10T16:01:02 Remove unused VVL skip message Following test angleproject:42265049 MultisampledRenderToTextureES31Test.DrawCopyThenBlendAllAttachmentsMixed/ES3_1_Vulkan no longer fails due to VVL error. Tested on Pixel 8. Remove the outdated VVL suppression. Bug: angleproject:42265049 Change-Id: I6e4ba623439a3705e0b897af0af1d1174ef34854 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6341271 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxiang Qian e41cbdb5 2025-02-26T17:51:06 Complete the implementation of GL_EXT_buffer_storage Currently, glBufferStorageEXT doesn't set buffer usage to DYNAMIC_DRAW. Also, validation of glGetBufferParameter* misses check for GL_BUFFER_IMMUTABLE_STORAGE_EXT and GL_BUFFER_STORAGE_FLAGS_EXT. This patch fixes these issues. Also, an end2end test is added. Bug: angleproject:399689628 Change-Id: Iecf6bd921f4fff849a5f059adf40043d08edfb7a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6312515 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Mohan Maiya 0331847e 2025-03-07T16:32:41 Vulkan: Update VkGraphicsPipelineCreateInfo::flags ... with protected access bits if VK_EXT_pipeline_protected_access is supported Bug: angleproject:42265839 Bug: angleproject:391002353 Change-Id: Ibb00a4a0dcb1084046403bf4bfaeeb8d125b9aea Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6336515 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu efb344e9 2025-03-06T15:09:21 Remove unused VVL skip message Below tests from the two bugs: angleproject:42264930 Texture2DBaseMaxTestES3.Fuzz545ImmutableTexRenderFeedback/ES3_Vulkan angleproject:42265542 FramebufferTest_ES3.ReattachToInvalidBaseLevel/ES3_Vulkan No longer fails due to VVL error. Tested on Linux with AMD Vulkan driver. Remove the original VVL error from the skip list. Bug: angleproject:42264930 Bug: angleproject:42265542 Change-Id: I249033e643211bae399712303162ab990c154fa6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6334552 Auto-Submit: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Solti b5ad5035 2025-03-05T18:01:42 Manual roll vulkan-deps from 898a2304cea9 to 4b720a347d47 (1 revision) Manual roll requested by solti@google.com https://chromium.googlesource.com/vulkan-deps.git/+log/898a2304cea9..4b720a347d47 Also rolling transitive DEPS: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/8496ed5028cee8c5e5f18cc791766f6b454609fb..5f8c82f68a9e1a63f3b9effceb928d7068873813 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,solti@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://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: b/399867824 Bug: b/400986108 Tbr: solti@google.com Change-Id: I205de362c25692700f8bf092003b2882028b6740 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6325931 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Solti Ho <solti@google.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Igor Nazarov e70d1298 2025-02-18T14:32:35 Vulkan: Rework SurfaceVk::mUse tracking logic Original commit that introduced `mUse` had a bug and was then reverted: Vulkan: SurfaceVk should only wait for GPU work that uses it https://crrev.com/c/angle/angle/+/4220723 The reland fixed the original issue by adding "contextVk::mLastSubmitQueueSerial" into "Surface::mUse" before calling finish: Reland "Vulkan: SurfaceVk should only wait for GPU work that uses it" https://crrev.com/c/angle/angle/+/4406891 However, the real issue was that the `finish()` call (called because of the "waitIdleBeforeSwapchainRecreation" feature) was done after `releaseSwapchainImages()`, which resets all resource uses. Because of this bug, `finish()` ignored all uses of swapchain images, causing GPU crash on Mali. Crash was not because of semaphores that was not tracked by resource use. Adding "mLastSubmitQueueSerial" fixed the crash simply because it accounts for all uses ever made by the Context. This change fixes this issue by calling `mergeImageResourceUses()` at the beginning of `releaseSwapchainImages()`. Adds missing retain when transitioning into the `ImageLayout::Present`. Updates one-off submit tracking by updating use of the image, rather than `SurfaceVk::mUse` directly. Explicitly tracks present semaphore submission. All these changes allow to remove adding `ContextVk::mSubmittedResourceUse` before calling `finish()` and in the `unMakeCurrent()`. I confirmed that this fix works by forcing `oldSwapchain` destruction (as if it was never used) and "waitIdleBeforeSwapchainRecreation" enabled. GPU crash happens on SM-S921B if remove addition of `mSubmittedResourceUse` before `finish()` call, and fixed again by calling `mergeImageResourceUses()` in the `releaseSwapchainImages()`. So the `mergeImageResourceUses()` fixes the issue without potentially waiting for unrelated submissions from the `mSubmittedResourceUse`. After this change, surface use tracking should work according to the original intent. Bug: angleproject:397848903 Bug: b/267806287 Change-Id: Ic8197e33d0c19aad274b5f9da6f9c7377a166b60 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6277446 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov ad6c3d74 2025-02-19T22:45:29 Vulkan: Fix RP resolve layouts w.r.t shared present mode This is partially a regression after the previous change: Vulkan: Fix present optimization w.r.t shared present mode Before the above change, swapchain image was still optimized for present even when using shared present mode. However, because SetBitField(mAttachmentOps[packedAttachmentIndex].finalResolveLayout line was using `getCurrentImageLayout()` (lucky coincidence) it was setting correct SharedPresent layout into `finalResolveLayout`. The `initialLayout` and reference `layout` was still `VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL`, but for some reason VVL was not producing any errors. This change adds setting `finalResolveLayout` for the resolve attachment, which in turn propagates `VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR` to all renderpass layouts as well as to the dynamic rendering info. Test: angle_end2end_tests --gtest_filter=EGLSingleBufferTest.SharedPresentLayoutWithMSAA/* Bug: angleproject:42262606 Change-Id: I49a121f1d43a078890b0dc32e0574a79e3565270 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6281569 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov 318d4038 2025-02-18T13:19:28 Vulkan: Fix present optimization w.r.t shared present mode Since the implementation of "EGL_KHR_mutable_render_buffer" mode (angleproject:42262606), the renderpass optimization for present (b/153885625) was not working correctly. It sill tries to transition into `ImageLayout::Present`, but instead of entirely skipping the transition, it inserts the barrier even when renderpass is still opened. When both "supportsSharedPresentableImageExtension" and "preferDynamicRendering" are enabled, code will hit ASSERT in `flushToPrimary()` when attempting to record `ImageLayout::Present` barrier into the primary command buffer. Above issue is fixed by skipping the transitioning into `ImageLayout::Present` when in shared present mode. Other changes and fixes: - removed renderpass flush when resolving with renderpass, since it is not necessary (angleproject:42265256). - above change reveled a bug in `finalizeImageLayout(&mColorImageMS)` call. This call reverts the layout in the previous finalize call from Present to ColorWrite. So it must have been inserted before finalizing the swapchain image. Issue fixed by removing both finalize calls. - updated condition to skip invalidate w.r.t shared present mode (b/229689340), that was missed during implementation of "EGL_ANDROID_front_buffer_auto_refresh" (angleproject:42265697). Test: angle_end2end_tests --gtest_filter=EGLSurfaceTest.PresentLayoutTransitionWithMSAA/* Bug: b/153885625 Bug: angleproject:42262606 Bug: angleproject:42265256 Bug: b/229689340 Bug: angleproject:42265697 Change-Id: Ifad8aea8548fa7bfac27941812c435b2af655309 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6277445 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Shahbaz Youssefi 1a0c9db3 2025-02-27T10:43:00 Vulkan: Disable monolithic pipeline creation with GPL As it violates OpenGL ES rules. This change also removes Vulkan perf counter tests that attempt to verify that warmed up programs hit the cache... this fails in non-trivial ways especially with graphics pipeline library due to: - Warm up tasks being async, they may finish after the test reads the perf counters to set expectations - Some drivers report a cache miss when fast-linking libraries... but likely they don't even look at the cache (so both hit and miss would have been inaccurate) - There is no 100% guarantee that the warmup really leads to a draw-time cache hit. Things are made worse by https://chromium-review.googlesource.com/c/angle/angle/+/5421594 because we don't necessarily even wait for the warm up tasks if ANGLE's view of the pipeline description doesn't match what was used for warm up (even if internally to the driver some of the state does not affect the binary blobs). Bug: angleproject:42265839 Change-Id: Iaf96e4f64e2187abc666ff07fe1304d7474a0e86 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6309696 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>
Yuxin Hu 6b10ae33 2025-03-03T14:41:21 Remove the unused SkippedSyncvalMessage Below tests from the two bugs angleproject:42264934: FramebufferFetchES31.BasicInout_NonCoherent/ES3_1_Vulkan angleproject:42264929: MultisampledRenderToTextureES3Test.RenderbufferDrawThenBlitDepthStencilOnly/ES3_Vulkan No longer fails due to VVL errors. Tested on Pixel 8. Remove them from the kSkippedSyncvalMessages list. Bug: angleproject:42264929 Bug: angleproject:42264934 Bug: angleproject:391284743 Change-Id: I4369eba5ef2a056b4085fced6419e7add7a5c279 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6317223 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi ae567733 2025-02-26T19:09:14 Vulkan: Make use of VK_EXT_device_fault if exists This Vulkan extension, if available, can provide further details about the device in case of VK_ERROR_DEVICE_LOST. * Added the following ANGLE feature: supportsDeviceFault * It shows whether the extension VK_EXT_device_fault is supported and that the deviceFault bit is enabled on the physical device. * Added the Vulkan entry point for the following function: * vkGetDeviceFaultInfoEXT * Added the following to the renderer: * mFaultFeatures (device feature) * retrieveDeviceLostDetails(); to log information regarding the following if the appropriate support is available: * Address faults * Vendor-specific faults * Vendor binary dump (logged in hex format) * Added RetrieveDeviceLostInfoFromDevice() to vk_renderer.cpp to be used in Renderer::retrieveDeviceLostDetails(). * Updated ContextVk::handleError() to try to retrieve more info in case of DEVICE_LOST. Bug: b/399478440 Change-Id: If8d8e04001dabbe775c023f9922c44ef2205317e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6305888 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Solti b6301fb1 2025-03-04T22:04:53 Manual roll vulkan-deps from 1f5d4f5673a3 to 898a2304cea9 (1 revision) Manual roll requested by solti@google.com https://chromium.googlesource.com/vulkan-deps.git/+log/1f5d4f5673a3..898a2304cea9 Also rolling transitive DEPS: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/cc4bfd761e025ff14ae329c1b1dbbf24e4f0922b..8496ed5028cee8c5e5f18cc791766f6b454609fb 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,solti@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://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: b/400789178 Bug: b/399867824 Tbr: solti@google.com Change-Id: I375095773761362f98e6679c4297d3a58c4e5f11 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6320900 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Solti Ho <solti@google.com>
Amirali Abdolrashidi 2e65d3d4 2025-02-03T16:26:46 Vulkan: Fine-tune submission for multiple RPs This CL aims to fine-tune submission based on a certain command buffer size. This allows us to perform one submission for multiple smaller render passes. * Added mCommandsPendingSubmissionCount to ContextVk. * In ContextVk::syncState(), preferSubmitAtFBOBoundary is only used if the render pass pending command count exceeds the threshold: kMinCommandCountToSubmit * Currently set to 32. * For now, we still submit if the command is a clear (for example glClearBufferfv()). * For now, we also still submit if the command is an invalidate (for example, glInvalidateFramebuffer()). * In ContextVk::flushImpl(), if the pending command count exceeds the threshold (kMinCommandCountToSubmit) and the device is found to be idle, the work is submitted to keep the device busy. * Modified the following unit test from VulkanPerformanceCounterTest: VerifySubmitCounterForSwitchUserFBOToDirtyUserFBO * Since there is now a minimum command count for submission, the number of draw calls has been changed so that the submission is still issued at the new FBO boundary. * After this CL, life_is_strange shows the following improvements: (From the latest measurements) * +19% wall_time * +38% cpu_time Bug: angleproject:42265052 Change-Id: I18452cc1d39ca7e0ac376f6012974b498153cce8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6182927 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Hailin Zhang bd8bc105 2025-02-19T18:08:32 vulkan: disable pipeline cache data serialization for nvidia device. we still see the big cache data issue after driver version 520. rename hasEffectivePipelineCacheSerialization to skipPipelineCacheSerialization. Bug: b/358380399 Change-Id: Idd8354f95c3eb4c2e58678a4cf50c8b6af20f371 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6284126 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Hailin Zhang <hailinzhang@google.com>
Charlie Lao 9df57ec5 2025-02-28T14:35:01 Vulkan: Limit max vector size of mEmptySlotBits to 4 Add another safety guard: in case of some uncommon usage case that we end up with one buffer/texture is part of many descriptorSets, skip the tracking logic in SharedCacheKeyManager to avoid the excessive overhead associated with it. The only downside is that when BufferBlock gets destroyed, we will not able to immediately destroy all cached descriptorSets that it is part of. They will still gets evicted later on if needed (see evictStaleDescriptorSets for detail). Based on 300+ app traces we have, this appears very rare situation. Also made this behavior limited to DescriptorSetCacheManager, so that FramebufferCacheManager will not get affected. FramebufferCacheManager does not have any cache eviction, so it is important that we always destroy cache when texture is destroyed. Bug: b/293297177 Bug: b/384839847 Change-Id: I0f1eb21b014f83675b14fb59ab59b5c694a421e9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6314161 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
angle-autoroll aa697ed0 2025-02-28T11:05:55 Manual Roll vulkan-deps from c1c31f to 040c47 (9 revisions) https://chromium.googlesource.com/vulkan-deps.git/+log/c1c31f4d17a9..040c4735c51c Also rolling transitive DEPS: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang/+log/8b822ee8ac2c3e52926820f46ad858532a895951..0b7c079b32f676b57e92a8ded374976842985116 https://chromium.googlesource.com/external/github.com/LunarG/VulkanTools/+log/e1fcaef1e8f2e4f4ccbfb58ad8f20e807368de76..f82d29981c0b0136adfaa7863df485a705c80c84 https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools/+log/f289d047f49fb60488301ec62bafab85573668cc..d3bfa4b9b639c47ffaee7c1c1b76044c92fa66cc https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/4e7b0c905b1a0401e24333800937cc8792efa037..7d5cab3ff7ea5a8b62dc94df72141606539344fc 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,yuxinhu@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://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: b/399191283 Bug: b/399969262 Tbr: yuxinhu@google.com Change-Id: I150f1cb9c56f014628c1a2aa06c1981b71d2d605 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6312337 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Solti Ho <solti@google.com>
Roman Lavrov 3c08ed1e 2025-02-28T10:31:53 Cleanup: clarify ShouldReportDebugMessage logic Bug: angleproject:391284743 Change-Id: I0900bc834d2bfa177f98ddb75747ae4bc1578297 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6312881 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 65343c4c 2025-02-27T11:23:04 Vulkan: Improve ConvertImageLayoutToVkImageLayout() This CL removes supportsMixedReadWriteDepthStencilLayouts feature flag. This feature flag was introduced when ANGLE only requires vulkan 1.0. But now we require vulkan 1.1 and this is part of vulkan 1.1 core spec. So it is no longer needed and wasting CPU cycles to check this every time ConvertImageLayoutToVkImageLayout() is called. With supportsMixedReadWriteDepthStencilLayouts removed, convert from ImageLayout to VkImageLayout no longer needs renderer parameter. The layout information in kImageMemoryBarrierData is never modified by renderer at run time. So the renerer arguments has been removed in a lot of places, avoids another pointer de-reference. Bug: b/384839847 Change-Id: I5a89a890c0c0a1f99d2fdc1b2a85baf7de5c28bf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6310839 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao e6d28755 2025-02-27T11:09:10 Vulkan: Use VkImageLayout in DescriptorInfoDesc DescriptorInfoDesc is part of the cache key for descriptorSet cache. Right now it uses ImageLayout for DescriptorInfoDesc::imageLayoutOrRange. There are cases where two ImageLayout have the exact same VkImageLayout, which end up with cache miss. Switch to use VkImageLayout will make it cache hit. Given that this field is uint32_t, we are not really getting any benefit by using ImageLayout. Bug: b/384839847 Change-Id: I14060c3faab701b76a554a1e3a07aff44e25d7cd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6310838 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 055123f8 2025-02-27T10:45:56 Vulkan: Don't maintain SharedCacheKeyManager for BufferBlock Dynamic descriptor type uses the underlying BufferBlock in the descriptorSet. There could be many BufferHelper objects sub-allocated from the same BufferBlock. And each BufferHelper could combine with other buffers to form a descriptorSet. This means the combination for BufferBlock could potentially be very large, in thousands with some app traces like seeing in honkai_star_rail. The overhead of maintaining mDescriptorSetCacheManager for BufferBlock could be too big. In this CL I have chosen to not maintain mDescriptorSetCacheManager in the BufferBlock. The only downside is that when BufferBlock gets destroyed, we will not able to immediately destroy all cached descriptorSets that it is part of. They will still gets evicted later on if needed (see evictStaleDescriptorSets for detail). After this CL, running with all app traces we have, the max vector size of SharedCacheKeyManager::mEmptySlotBits is no more than 2, versus ~70s before the CL. Bug: b/384839847 Bug: b/293297177 Bug: b/237686097 Change-Id: I7c7c91cd0aeacba4145575ac4270b713bf38b742 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6310837 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 00f5944d 2025-02-26T15:42:14 Vulkan: Avoid duplicate sharedCacheKey in mDescriptorSetCacheManager There are usage cases that same buffer/texture bound to multiple binding points. When we have a cache miss, we end up walking through all binding points and record the sharedCacheKey there (so that when the buffer/texture is destroyed, the cache will be destroyed). This causes same cacheKey added to the same buffer/texture multiple times. This CL keeps track of last added sharedCacheKey and do a quick check against it and it matches, we just early return. With this CL, SharedCacheKeyManager::mEmptySlotBits max vector size reduced from ~200 to ~70 for batman_telltale. Bug: b/384839847 Change-Id: I0d405c18b3f1c807da4c7a402392667630bd7f1f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6306687 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Roman Lavrov fb03f3c5 2025-02-27T15:05:16 Vulkan: Enable the use of syncval extra properties Adjusted a couple of cases that weren't working on bots due to a difference in write barriers (which are probably safe to ignore altogether in this case) Bug: angleproject:391284743 Change-Id: I1da2d05aff8b2c9ac7497903d85754054f861495 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6309578 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu 73fc6666 2025-02-27T11:51:29 Revert "Add VVL Suppression to allow ANGLE rolls into Chromium" This reverts commit 1ab3889c1263f31954c21396d18a19d0b4ac0f1c. Reason for revert: latest VVL code rolls in chromium https://chromium-review.googlesource.com/c/chromium/src/+/6307665. We can remove the suppression that is dependent on the old VVL code. Original change's description: > Add VVL Suppression to allow ANGLE rolls into Chromium > > Bug: b/399191283 > Change-Id: I05092fe61141ef9265e3f067f9bdbb9f3ef86daf > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6306838 > Reviewed-by: Yuly Novikov <ynovikov@chromium.org> > Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Bug: b/399191283 Change-Id: Id373b85b5afbff73d1ce9920c73644e9245cd4e5 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6309746 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Yuxin Hu 1ab3889c 2025-02-26T20:13:56 Add VVL Suppression to allow ANGLE rolls into Chromium Bug: b/399191283 Change-Id: I05092fe61141ef9265e3f067f9bdbb9f3ef86daf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6306838 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
angle-autoroll 96a1bda4 2025-02-26T18:13:01 Manual roll vulkan-deps from 1138e3898873 to d0470d9cf4eb (15 revisions) Manual roll requested by yuxinhu@google.com https://chromium.googlesource.com/vulkan-deps.git/+log/1138e3898873..d0470d9cf4eb Also rolling transitive DEPS: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang/+log/18f581a8a2c112074815e613776b928362ec324b..8b822ee8ac2c3e52926820f46ad858532a895951 https://chromium.googlesource.com/external/github.com/LunarG/VulkanTools/+log/1af97f05fe184de16139b2dc31842334007f95e7..27732e6ed99afa91b3493bc5e5412f4914482828 https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools/+log/d5b6f2de791deb73357a797d5db7aa24ce45194c..f289d047f49fb60488301ec62bafab85573668cc https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools/+log/176fef0bccaba8bdf51de54ab4eed8d5d9aaac77..fb8f5a5d69f4590ff1f5ecacb5e3957b6d11daee https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Utility-Libraries/+log/6be00ca9f51c714780cc1d6f537f8bc5650b6204..2d8f273ebd4b843c402d9ee881616895b854e42f https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/e0158a966a288dbbaca9609a76f34f91facce4a8..48c93ad7cc9e0da74ed21c8bf7d56324d995644d 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,yuxinhu@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://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: b/399191283 Tbr: yuxinhu@google.com Change-Id: Ib298161513c2d2ffded0a1b785f9c2322f553707 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6305262 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Yuxiang Qian ca8f072e 2025-02-13T16:46:30 Implement EGL_LARGEST_PBUFFER When EGL_LARGEST_BUFFER is set to true during creating a EGL pbuffer surface, it requires the largest available pixel buffer surface when the allocation would otherwise fail. This means if width/height is bigger than config's maxPbufferWidth/maxPbufferHeight, it should be clamp to maxPbufferWidth/maxPbufferHeight. An end2end test is also added. Bug: angleproject:397315935 Change-Id: Ic160d9693478c87b59ece0a421d3acd5d6699ddc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6277912 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Amirali Abdolrashidi 8dbd2fe6 2025-02-19T14:07:21 Reland "Vulkan: Take stride into account for max buf size" This is a reland of commit 91fe334eadd279746e06367142de6e8d9f8d00ed In the original change, mMaxBufferMemorySizeLimit was cast to a 32-bit value for cap initialization. However, if the reported value was larger than 4GB, it could result in incorrect cap values, leading to shader compilation errors (e.g., exceeding maximum uniform location size). * Updated LimitToIntAnd() to always take a 64-bit value for the cap. * The other arg (physicalDeviceValue) would be cast to the same type for std::min(). * Removed the 32-bit casting from mMaxBufferMemorySizeLimit during cap initialization. Original change's description: > Vulkan: Take stride into account for max buf size > > * Added LimitToIntAnd() to limit the input value to a certain > threshold in addition to the int limit. > > * Cached the max buffer size limit in the renderer. > * mMaxBufferMemorySizeLimit > > * In vk_caps_utils: Capped the following buffer size-related limits > to the maximum memory allocation size: > > * maxStorageBufferRange > * maxTexelBufferElements > * maxUniformBufferRange > > Bug: angleproject:391002353 > Test: KHR-GLES31.core.texture_buffer.texture_buffer_max_size > KHR-GLES32.core.texture_buffer.texture_buffer_max_size > Change-Id: Iee9b13f5440a4f5e6f952e7d2beaf9485f864c2d > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6283625 > Reviewed-by: mohan maiya <m.maiya@samsung.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Bug: angleproject:391002353 Change-Id: Ieb06a1dcf3096b4d6f3643f96d0e05b2be6b2093 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6303408 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
angle-autoroll d9a9b75c 2025-02-25T22:21:03 Manual roll vulkan-deps from 02cb40cbb578 to 1138e3898873 (13 revisions) Manual roll requested by yuxinhu@google.com https://chromium.googlesource.com/vulkan-deps.git/+log/02cb40cbb578..1138e3898873 Also rolling transitive DEPS: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang/+log/104bd85d990155f04f050972374a3502b4631830..18f581a8a2c112074815e613776b928362ec324b https://chromium.googlesource.com/external/github.com/LunarG/VulkanTools/+log/c98e976b567735776a4dc692bc744231dae4b13a..1af97f05fe184de16139b2dc31842334007f95e7 https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools/+log/aafd524577cc90fcdd13a6f0bcbfb929a30ee90f..d5b6f2de791deb73357a797d5db7aa24ce45194c https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/fc5788170fbe2e29162862bc817357c7fb9a04e4..e0158a966a288dbbaca9609a76f34f91facce4a8 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,yuxinhu@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://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: b/399191283 Tbr: yuxinhu@google.com Change-Id: Ic2bdc48ba5d69b80186306eda6753a0ab54ef98f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6302919 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Yuxin Hu 0151051b 2025-02-25T11:20:15 Revert "Vulkan: Take stride into account for max buf size" This reverts commit 91fe334eadd279746e06367142de6e8d9f8d00ed. Reason for revert: breaks Android presubmit tests: https://android-review.git.corp.google.com/c/platform/external/angle/+/3506755 Original change's description: > Vulkan: Take stride into account for max buf size > > * Added LimitToIntAnd() to limit the input value to a certain > threshold in addition to the int limit. > > * Cached the max buffer size limit in the renderer. > * mMaxBufferMemorySizeLimit > > * In vk_caps_utils: Capped the following buffer size-related limits > to the maximum memory allocation size: > > * maxStorageBufferRange > * maxTexelBufferElements > * maxUniformBufferRange > > Bug: angleproject:391002353 > Test: KHR-GLES31.core.texture_buffer.texture_buffer_max_size > KHR-GLES32.core.texture_buffer.texture_buffer_max_size > Change-Id: Iee9b13f5440a4f5e6f952e7d2beaf9485f864c2d > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6283625 > Reviewed-by: mohan maiya <m.maiya@samsung.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Bug: angleproject:391002353 Change-Id: I20f68f98dcf43fd8cd42f7dce2465332fdb3ab51 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6302249 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 9202e05a 2025-02-21T18:42:42 Vulkan: Invalidate the SharedCacheKey when cache gets evicted When descriptorSet cache gets evicted, right now we have a bug that the sharedCacheKey does not gets invalidated. This caused SharedCacheKeyManager always think the sharedCacheKey is valid and the mEmptySlotBits never gets cleared, which leads to mEmptySlotBits growth over time, and increases CPU overhead when walking mEmptySlotBits vector. This CL adds an assertion to ensure that all valid sharedCacheKeys has a corresponding entry in the cache, which means without this CL, some traces and dEQP tests are hitting the assertion. This CL also fixes the bug. Bug: b/384839847 Change-Id: If013443144aceb5d62f67f619074ef831e73653b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6292988 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 91fe334e 2025-02-19T14:07:21 Vulkan: Take stride into account for max buf size * Added LimitToIntAnd() to limit the input value to a certain threshold in addition to the int limit. * Cached the max buffer size limit in the renderer. * mMaxBufferMemorySizeLimit * In vk_caps_utils: Capped the following buffer size-related limits to the maximum memory allocation size: * maxStorageBufferRange * maxTexelBufferElements * maxUniformBufferRange Bug: angleproject:391002353 Test: KHR-GLES31.core.texture_buffer.texture_buffer_max_size KHR-GLES32.core.texture_buffer.texture_buffer_max_size Change-Id: Iee9b13f5440a4f5e6f952e7d2beaf9485f864c2d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6283625 Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 5775a974 2025-02-21T11:00:05 Vulkan: Fix transition to FORIEGN and back in same submission Image layout transitions are typically automatically handled. In some cases however, the image layout is specifically "finalized". For foreign images, the relevant cases are all about the point in time when the image is being released. When a foreign image's layout is finalized, a barrier is generated to transition it to the FOREIGN queue on submission. Previously, an incorrect assumption was made that after such a point, the VkImage will no longer be used by any commands. This was incorrect because of EGL Images, which let the same VkImage (and ImageHelper) be shared between multiple textures. The following scenario broke that assumption: - Texture is bound to the (foreign) EGL image - Texture is used and deleted * VkImage's transition back to foreign is cached, but not executed - Another texture is bound to the same EGL image - Texture is used * At this point, the texture is re-acquired from foreign, but it wasn't released in the first place! In this change, a vkQueueSubmit is issued after the foreign image's layout is finalized to make sure the transition back to FOREIGN is applied. Bug: angleproject:42263241 Bug: angleproject:42262454 Bug: angleproject:390443243 Bug: chromium:382527242 Change-Id: Ibe3e6d60f282f9fb0eed1deba3325456017c3617 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6292804 Reviewed-by: mohan maiya <m.maiya@samsung.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Alex Dean b47fffc8 2025-02-20T11:11:25 CL/VK: Add rewrite-packed-structs and int8 CLSPV option To support structs with three- and four-component vectors, --rewrite-packed-structs is needed as a CLSPV option. The --int8 option is added to allow shaders to process char buffers. Tests-Passing: OCLCTS.test_vectors vec_align_packed_struct_arr Bug: angleproject:397733768 Change-Id: I98ecc9e82bc599453c27f60737bde752c69decd4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6284137 Reviewed-by: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao f09a19ce 2025-02-21T17:27:30 OpenCL: Pass bufferPtrOffsets by reference not value enqueueNativeKernel() is passing `const std::vector<size_t> bufferPtrOffsets` by value instead of reference. Changed to pass by reference in this CL. Bug: b/42266859 Change-Id: I337eb62451631297c8f389c9f850ff9ddd2421ec Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6293727 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi db8c86bd 2025-02-22T20:33:31 Vulkan: Disable imageless framebuffers on buggy ARM drivers Bug: chromium:371512561 Change-Id: Ibf8c4ed84a29139afd6d234690d240785656cc06 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6293786 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Solti Ho <solti@google.com> Commit-Queue: Solti Ho <solti@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Robic Sun 34faa3db 2025-02-08T15:17:10 Fix issue that stride setting is incorrect when rotation is true When rotateXY is true, stride should increase or decrease on the Y axis. Bug: angleproject:395131251 Change-Id: I0f5363c9952ccdf0a036499a9f918853eff7cd10 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6242496 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Robic Sun <Robic.Sun@arm.com>
Charlie Lao 23df4f26 2025-02-21T10:30:04 Vulkan: Avoid storage grow related copy for mDefaultUniformBlocks mDefaultUniformBlocks.uniformLayout is a std::vector, and my profile on all app traces indicates quite some storage reallocation on this data. This CL reserves enough storage upfront to avoids storage reallocation in LinkTaskVk::initDefaultUniformLayoutMapping(). Bug: b/293297177 Change-Id: If249a373aa3bd1795757d974cbcfce38a153a813 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6288314 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Igor Nazarov 323c49a3 2025-02-20T15:44:08 Vulkan: Fix swap optimization after staged clear for MSAA If the MSAA image only had a clear update and the update wasn't going to be applied to the swapchain image, the clear update was accidentally dropped because `flushStagedUpdates` wouldn't see the clear update which is already extracted in `deferredClearValues`. Test: angle_end2end_tests --gtest_filter=EGLSingleBufferTest.StagedClearResolveOnSwap/* Bug: angleproject:382006939 Change-Id: I53ae26eeb8a7f38b7758f86bf97982a90b1990dd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6285627 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov e5b87adc 2025-02-20T15:32:16 Vulkan: Fix WindowSurfaceVk::hasStagedUpdates w.r.t MSAA The old `hasStagedUpdates()` checked swapchain image for staged updates. However in case of MSAA, staged updates are added to the `mColorImageMS`. Universal solution is to check staged updates on the renderpass image from `mColorRenderTarget`, which will be `mColorImageMS` in case of MSAA surface, and the currently acquired swapchain image otherwise. No automated test is possible, since `glReadPixels()` still works as expected. Other reason is that `ANGLE_VK_TRACE_EVENT_AND_MARKER` before acquire inserts commands into the outside renderpass command buffer causing flush to happen. In other words, the debug marker interfering with the normal ANGLE behavior, so even visual test is not possible. Bug: angleproject:237449314 Change-Id: I237514a640a23a33d894109856711c1eb2dcbb29 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6285626 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Aurora Zhang ba174a76 2025-02-19T16:35:15 Vulkan: Bugfix for nullColorAttachmentWithExternalFormatResolve When nullColorAttachmentWithExternalFormatResolve is VK_TRUE, * The imageView in VkRenderingAttachmentInfo for dynamic rendering should be VK_NULL_HANDLE. * Push YUV resolveImageView as if it is the color attachment to ensure the coherency between ops, clearValues and attachmentViews for both dynamic rendering and render pass objects. Then pack the YUV resolve information first as well. * Add end2end tests that render and clear YUV with a depth attachment. Bug: angleproject:395212980 Change-Id: I8b6173b41723ed7dc12359e181791fb1ac22fc41 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6262510 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Igor Nazarov 03bdf1ca 2025-02-18T16:37:49 Vulkan: Use correct actual FormatID for MSAA swapchain image Implementation of "overrideSurfaceFormatRGB8ToRGBA8" feature missed updating actual FormatID for the MSAA swapchain image. This bug makes possible to initialize RGBA8 swapchain image and RGB8 MSAA image. However, on practice MSAA is still RGBA8 because RGB8 renderable is generally emulated on Android. VUID-vkCmdResolveImage-srcImage-01386: srcImage and dstImage must have been created with the same image format. This fix is cosmetic and is not expected to fix any real bugs (because RGB8 is generally emulated with RGBA8). Bug: angleproject:42265147 Change-Id: Ief4b74ac31e93a655f5088b7927e970585255f25 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6275968 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Charlie Lao 8f8b41e3 2025-02-14T17:54:51 Vulkan: Optimize for multiple TexSubImage calls in the same level Based on app traces, some apps make glTexSubImage call for the same level multiple times in a row. One extreme example is lumino_city, which it creates a 2D texture with nullptr data, and then calls glTexSubImage2D many times back to back for each row of the texture to update the data. Because we uses std::vector to store the per level update struct (SubresourceUpdate), it means we copy these data structures every time it grows 2x, until it hit the max size 1081. The other common case we get into is app update some area of the texture (like google map and gacha_life) which also end up with a few texSubImage calls back to back. The other more common case is we staged a clear first and then glTexSubImage which end up with vector size of 2. This CL changes to use std::deque instead of std::vector to store the staged update for a given level, which allows it to grow without extra penalty. Bug: b/293297177 Change-Id: Iabbc143074ad9d6fcf47abbddee09ecf7f78d1a7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6271964 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao c96844d9 2025-02-14T10:26:25 Vulkan: More vector storage fix BufferPool::mBufferBlocks reserves 32 entry storage based on data gathered from trace. BufferPool::mEmptyBufferBlocks switched to queue since we almost never walk the entire list unless it gets destroyed. Renderer::CollectGarbage is changed to take only one object. The only time it get called with more than one object is from ImageHelper::releaseImage(), which in this CL we now creates and pass GarbageObjects to Renderer::collectGarbage directly. This also allows me to delete recursive CollectGarbage() and DestroyGarbage() functions (which is doing emplace_back quite often, even though only two entries). PipelineHelper::mTransitions is updated to reserve storage for 8 entries based on trace data. Bug: b/293297177 Change-Id: I3e4552939a780dd26f9b7b8a67deee0d52d4f9bc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6270518 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
angle-autoroll bd643a1a 2025-02-19T12:16:50 Roll vulkan-deps from 2a09ac22553e to 126c9b378eb7 (19 revisions) https://chromium.googlesource.com/vulkan-deps.git/+log/2a09ac22553e..126c9b378eb7 Manual suppression for new VVL error: SYNC-HAZARD-READ-AFTER-WRITE for vkCmdDrawIndexed Also rolling transitive DEPS: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang/+log/ef5207f9f8cce5097568efb15d3297d8b5d13014..e66176c3f685b14dfa83882329e5d02f4e027c9b https://chromium.googlesource.com/external/github.com/LunarG/VulkanTools/+log/0ed717a810d28e7533d935a7c0017f6d267a8671..c98e976b567735776a4dc692bc744231dae4b13a https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader/+log/fde0f9718bd60b49cf8efc80d3fb7a093c309ac0..24e67179e2b0c7f9a2945927362c5ab0728e1fa8 https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools/+log/a9f88a232a4cd6634e47f0f93c8fac5789387a7a..dbe142e8f3a7f11478c2e4741c0d4c4b748fce4b https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/e3b763ef7c17f7fd6d21a7ffe4069b0e1b45469b..087c22a441e5fb8563516b6b515483898c843242 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,cnorthrop@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://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: b/397775556 Tbr: cnorthrop@google.com Change-Id: I8a22df0dd3b8238abc1c9c6998604d9f20a3a6c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6280153 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Neil Zhang f974ffa8 2025-01-27T11:06:30 Vulkan: Add stubs for expose VK_KHR_swapchain_mutable_format Bug: angleproject:386688871 Change-Id: I77a45e342ee46f65c4f2947071c713f914a937a2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6196939 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 4eed3a0c 2025-02-18T20:57:38 Vulkan: Remove EGL_WIDTH/HEIGHT from WindowSurfaceVk initialize The EGL_WIDTH and EGL_HEIGHT are only applicable when "EGL_ANGLE_window_fixed_size" is supported, which is currently only exposed by D3D backends. Bug: angleproject:40096349 Change-Id: I45886185d4740804709f274b70b73728b2a2e59d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6276201 Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 91d0c56b 2025-02-18T20:00:00 Vulkan: Disable support for GL_EXT_YUV_target ... on vendors that don't have support for nullColorAttachmentWithExternalFormatResolve Bug: angleproject:386749841 Change-Id: I3437bf189bdfb40cba760143a442df13d6ebf8dc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6277811 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Mohan Maiya 0f969b98 2025-02-18T07:48:03 Vulkan: Disable dynamic rendering for Samsung Enable VK_KHR_maintenance5 iff VK_KHR_dynamic_rendering is enabled Bug: angleproject:386749841 Change-Id: I60f949b2454dd43599516f051fa51f7378513cf5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6267100 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Austin Annestrand d5a0d83a 2025-02-14T15:47:06 CL/VK: Fix addMemoryDependencies RAW barrier Additionally, remove unused barrier insertion code in processKernelResources(). Bug: angleproject:380188569 Change-Id: Id9f330410eecf45f94fe77bf072cf6601bd2a9e2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6271135 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Gowtham Tammana 8c0ac979 2024-06-20T16:39:26 Vulkan: Setup compute only queue for OpenCL Select compute only for OpenCL vulkan backend if `angle_enable_cl_compute_only_pipe` is set to true in gn args. And setting it as default for OpenCL. Bug: angleproject:395045928 Change-Id: Ie1a53e629646dbd5ba332dd297a4c8b737070e95 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6244610 Reviewed-by: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Rafay Khurram f102ef02 2025-02-18T18:05:28 CL/Vulkan: Fix handling for NormalizedSamplerMaskPushConstant * Fixes creation of normalized sampler for push constant * CLSamplerVk should check if the sampler has not been created Tests-Passing: OCLCTS.test_image_streams CL_FILTER_NEAREST 3D, OCLCTS.test_image_streams max_images CL_FILTER_NEAREST 3D, OCLCTS.test_image_streams use_pitches CL_FILTER_NEAREST 3D Bug: angleproject:42266936 Change-Id: Ic70c55ad05f4babdd10b516e78a061bdb7aa2488 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6277809 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 51d2561b 2025-01-29T11:11:50 Vulkan: Enable a few features for Samsung Enable the following features for Samsung - 1. enableAdditionalBlendFactorsForDithering 2. forceSampleUsageForAhbBackedImages Bug: angleproject:386749841 Change-Id: I9e822b884ea4e44af38c2d2dd95c67b020b94f98 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6207669 Commit-Queue: mohan maiya <m.maiya@samsung.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
hoonee cho bf9f69fc 2025-02-14T11:57:14 CL/Vulkan: Add support for LiteralSampler The support for LiteralSampler in clspv is enabled through the SPIR-V non-sementic clspv reflection instructions - LiteralSampler [1]. Setting the utility functions to process these instructions. Bug: angleproject:394767574 Change-Id: I47aa03dac050f723d2e3f2a7f9c6c1756e7ac9cf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6239519 Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Austin Annestrand <a.annestrand@samsung.com>
Charlie Lao 2ba1f129 2025-02-11T15:27:16 Vulkan: Avoid storage reallocation in UpdateDescriptorSetsBuilder UpdateDescriptorSetsBuilder::mDescriptorBufferInfos and mDescriptorImageInfos will keep grow to a few hundreds of entries and that grow will end up with data copy and patching mWriteDescriptorSets. There is no requirement that entire vector of mDescriptorBufferInfos andmDescriptorImageInfos must be continuous. The only requirement is that when allocDescriptorBufferInfos(count) is called, the count of entries must be continuous. This CL uses a queue of vectors so that when we need to allocate new storage we just add another vector and allocate out of the new vector. This avoids all related data copy. Similar thing applies to mWriteDescriptorSets. The only thing I added for mWriteDescriptorSets is that I try to grow the first vector big enough to hold all of the entries for next submission to minimize the vkUpdateDescriptorSets call. Bug: b/293297177 Change-Id: Ief417ace8c8f7b477a1962505e9487bf31bae2ac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6253675 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 7afa2345 2025-02-12T11:45:59 Vulkan: More std::vector storage fix for TransformFeedbackVk etc PersistentCommandPool::mFreeBuffers switched to use std::deque since there is no need to be continuous storage TransformFeedbackVk::mBufferObserverBindings restored storage before calling emplace_back in a loop. We could use std::array, but this works as good. Bug: b/293297177 Change-Id: Id658216d3d4d25ee1d5cb4ccb8f1a4499b18c38d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6259279 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 064449af 2025-02-13T14:02:33 Vulkan: Fix race condition with foreign image transitions Bug: b/395155346 Bug: b/395513429 Bug: chromium:394148453 Change-Id: Ie6bcd74d8b6c8fdc37af0a0fbd29c0a7a96d0ec1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6265924 Reviewed-by: Jason Macnak <natsu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 93656e2d 2025-02-11T12:06:17 Vulkan: Reserve storage for ShaderInterfaceVariableInfoMap::mData To avoid data copy associated with vector storage reallocation, reserve enough space based on data gathered from app traces. Bug: b/293297177 Change-Id: I573fc89bd1c8590d9cfb72f576751c94f83720cd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6253674 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 3d29a799 2025-02-11T10:05:35 Vulkan: Reserve enough storage for ImageHelper::mSubresourceUpdates Most app specify textures from level 0 to level N, which works against std::vector storage grow scheme (which grows in size of 1,2,4,8,16). This CL simply reserve space for 12 mipmap levels to accommodate for most used texture sizes. Bug: b/293297177 Change-Id: I44818ed7ee436c73ab7ff146972f122ae9f08f33 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6253673 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Roman Lavrov cfb430c8 2025-02-10T13:19:05 Remove angle::ErrorStream helper Most uses of the helper either use just the code or a fixed string, which compiles to a few instructions. Using this helper adds 200+ bytes of assembly to each use, due to the unneeded instantiation of ostringstream which allocates a buffer etc. The combined effect of this CL on an Android perf build is ~12KB (0.2%) reduction in size. The cases where the message is actually formatted are converted to an explicit use of ostringstream. Removing the helper so that the new code is explicit about the intent to use ostringstream, or an alternative way to format the message. Discovered accidentally while looking into size reduction due to __builtin_unreachable() Semi-automated code change, risk of copy-paste mistakes should be minimal. Bug: angleproject:394129077 Change-Id: I47c2642d750d31416b08a1cfa435d5463c294e35 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6250078 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Amirali Abdolrashidi 9e86d8c0 2025-02-05T16:31:22 Vulkan: Fix VVL due to memory map range VVL: VUID-VkMappedMemoryRange-size-01390 * Updated BufferBlock::map() so the device memory uses the actually allocated buffer size. * To flush and invalidate a mapped memory range (non-coherent), the memory size is now aligned with nonCoherentAtomSize from the physical device limits. * Added an assert to make sure that the mapped size is within the allocated buffer size range. * Unskipped ExternalBufferTestES31 cases for Pixel6, except one case which seems to take a long time and result in timeout. * BufferDoesNotLeakAHB Bug: angleproject:394685081 Change-Id: Iddfb45997fed53c5ee99938d9bb57b670550b9a6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6238059 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi d252425d 2025-02-06T14:51:36 Vulkan: Check source image usage flags in copy paths ... instead of the format feature flags. If the source of the copy is has external format (allowed with glCopy[Sub]TextureCHROMIUM), the format feature checks are unable to query the format features. However, the image usage flags already have the required information (whether the image can be copied from, sampled from, etc). Bug: chromium:383056998 Change-Id: I2ba8820751eb526ef497a8be724193276fd46160 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6238265 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Igor Nazarov ae84e067 2025-02-10T19:31:37 Vulkan: Use correct feature in queryAndAdjustSurfaceCaps() Check "supportsSurfaceMaintenance1" feature instead of "supportsSwapchainMaintenance1", because `VkSurfacePresentModeEXT` structure requires "VK_EXT_surface_maintenance1" extension and not "VK_EXT_swapchain_maintenance1". Some platforms may expose one but not the other, causing inconsistent `GetMinImageCount()` calculations and swapchain recreation on each frame if "perFrameWindowSizeQuery" feature is enabled. Bug: angleproject:42267111 Change-Id: Id17bec8017799a7c175e6a4b03583665faf5dddd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6249841 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 0026006d 2025-02-10T12:03:40 Vulkan: Fix missing barrier between dispatch calls When storage images are used, ANGLE accidentally did not mark the images as being written to, so subsequent barriers were not produced when necessary. Bug: angleproject:352610491 Bug: b/394611669 Change-Id: Idd3e6aa6b90212605594240a533ebaec66850ea9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6249459 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>