src/libANGLE/renderer/vulkan/ShareGroupVk.cpp


Log

Author Commit Date CI Message
Charlie Lao 74f74b63 2024-11-14T10:07:34 Vulkan: Add ContextVk::onFramebufferBoundary() function This makes a more formal API to track frame boundary. Also adds a uint32_t mCurrentFrameCount to track the total number of frames rendered so that we could use for heuristic purpose. Bug: angleproject:372268711 Change-Id: I153497403ed0d8fde18f1786186ce600df60c514 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6022549 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 087cc411 2024-11-14T11:05:14 Vulkan: Add mRenderer to ShareGroupVk class For convenience, instead of passing renderer to shareGroupVk's API, keep mRenderer in SharGroupVk class at constructor call. Bug: angleproject:372268711 Change-Id: I9534f7dbe24121856221b89ccf8fc6a353bbb0cc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6022548 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 1db80b88 2024-07-10T12:47:42 Reland "Vulkan: Use VK_KHR_dynamic_rendering[_local_read]" This is a reland of commit c379ff48043a47e444c388c45270db40d3172d50 Original change's description: > Vulkan: Use VK_KHR_dynamic_rendering[_local_read] > > Bug: angleproject:42267038 > Change-Id: I1f4eb0f309992a9c1c287a69520dadf5eff23b26 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5637155 > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> > Reviewed-by: Charlie Lao <cclao@google.com> Bug: angleproject:42267038 Change-Id: I083e6963b5421386695e49a9872edbb2016c9763 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5691342 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 7d461b21 2024-07-10T14:11:53 Revert "Vulkan: Use VK_KHR_dynamic_rendering[_local_read]" This reverts commit c379ff48043a47e444c388c45270db40d3172d50. Reason for revert: Regresses CPU perf and memory when _not_ using DR Original change's description: > Vulkan: Use VK_KHR_dynamic_rendering[_local_read] > > Bug: angleproject:42267038 > Change-Id: I1f4eb0f309992a9c1c287a69520dadf5eff23b26 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5637155 > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> > Reviewed-by: Charlie Lao <cclao@google.com> Bug: angleproject:42267038 Change-Id: I3865f0d86813f0eeb9085a92875a33bd449b907f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5691337 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi c379ff48 2024-06-10T22:01:57 Vulkan: Use VK_KHR_dynamic_rendering[_local_read] Bug: angleproject:42267038 Change-Id: I1f4eb0f309992a9c1c287a69520dadf5eff23b26 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5637155 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Charlie Lao 0636b509 2024-05-06T12:36:20 Vulkan: Move RefCountedEvent GC and recycler to ShareGroupVk (2/3) One of the problem we had with RefCountedEvents is CPU overhead comes with it, and some part of the CPU overhead is due to atomic reference counting. The RefCountedEvents are only used by ImageHelper and ImageHelpers are per share group, so they are already protected by front end context share lock. The only reason we needs atomic here is due to garbage cleanup, which runs in separate thread and will decrement the refCount. The idea is to move that garbage list from RendererVk to ShareGroupVk so that access of RefCountedEvents are all protected already, thus we can remove the use of atomic. The down side with this approach is that a share group will hold onto its event garbage and not available for other context to reuse. But VkEvents are expected to be very light weighted objects, so that should be acceptable. This is the second CL in the series. In this CL, we added RefCountedEventsGarbageRecycler to the ShareGroupVk which is responsible to garbage collect and recycle RefCountedEvent. Since most of ImageHelper code have only access to Context argument, for convenience we also stored the RefCountedEventsGarbageRecycler pointer in the vk::Context for easy access. vk::Context argument is also passed to RefCounteEvent::init and release function so that it has access to the recycler. The garbage collection happens when RefCountedEvent is needed. The per renderer recycler is still kept to hold the RefCounteEvents that gets released from ShareGroupVk or when it is released without access to context information. Bug: b/336844257 Change-Id: I36fe5d1c8dacdbe35bb2d380f94a32b9b72bbaa5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5529951 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi b4cf07c3 2024-03-27T15:58:04 Vulkan: Move the interface pipeline library caches to share group When linking libraries into a pipeline, the linked pipeline lives in ProgramExecutableVk and may be shared between contexts in a share group. The caches for the vertex input and fragment output libraries thus cannot live in the context, but should remain alive until all contexts in the share group are destroyed. This change moves these caches to the share group. Bug: angleproject:8629 Change-Id: I2f7edf44d676505cf5e7e24640c6850c67f8b5e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5401514 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 914fe61b 2024-03-15T13:20:49 Vulkan: Rename RendererVk.* to vk_renderer.* Done in a separate CL from the move to namespace vk to avoid possible rebase-time confusion with the file name change. Bug: angleproject:8564 Change-Id: Ibab79029834b88514d4466a7a4c076b1352bc450 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5370107 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 60aaf4a0 2024-03-14T12:58:56 Vulkan: Move renderer to namespace vk This class is agnostic of EGL. This change moves it to namespace vk for use with the OpenCL implementation Bug: angleproject:8564 Change-Id: I57f7807d6af8b3d5d7f8efbaf8b5d537a930f881 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5371324 Reviewed-by: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi aba3705b 2024-03-02T21:58:34 Vulkan: Completely remove egl::Display from RendererVk This class is now independent of EGL. The only mentions of EGL is egl::ContextPriority, which is just an enum and is tolerable for now. OpenCL can now instantiate RendererVk without having to create a temp egl::Display. Bug: angleproject:8564 Change-Id: Ia78cfcb3a48c97f397441cf7cda71d74cfaddd8f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5335581 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Austin Annestrand fc440afa 2024-02-16T13:57:32 Vulkan: Move DS builder class to Vk utils Currently, UpdateDescriptorSetsBuilder lives in ShareGroupVk.cpp/h. The UpdateDescriptorSetsBuilder isn't really GL-specific. Thus it can be moved over to vk_cache_utils.h (more of a Vk utility class). Bug: angleproject:8546 Change-Id: I1ead04bab4c5840e6c471cdc7c5db4220e32bd50 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5303540 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 4b356c39 2023-08-17T10:49:19 Vulkan: Drop support for VMA 2.0 Since ANGLE and Chromium were last updated to use VMA 3.0, there have been no breaking issues so far. * ANGLE update: https://crrev.com/c/4777337 * Chromium update: https://crrev.com/c/4911597 Therefore, the support for the old VMA (2.3) can now be removed. * Removed ANGLE_VMA_VERSION from the build files, since they are no longer required. * Removed the VMA-related guards in the code as well. * Removed the flags and thresholds for the buddy algorithm, which were used in VMA 2.3. * Share group buffer pools is no longer a map. Bug: b/303290680 Change-Id: Ic2b29e8f95ca5c941b297b20442c5bad4b8f52e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4791667 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 84c30b76 2022-07-12T20:42:00 Vulkan: Add single-level mutable texture flushing So far, the feature to flush mutable textures after switching to a new texture only applied to textures with at least two mip levels. In that case, the whole mip chain would be allocated for those textures. This change will add single-level texture flushing as well. However, the it should be optimized to prevent allocating the whole mip chain for only one defined level, and reduce memory usage. * Updated the code for previous texture flushing to include one-mip textures as well. * Added the condition that the mutable texture not be bound as an attachment for flushing. * Changed ImageMipLevels::FullMipChain to ::EnabledLevels in order to limit the number of allocated mips. * Removed ::FullMipChain from ImageMipLevels. Bug: b/285613719 Change-Id: Ibc76917345820c5a0991f700e9fb93e4cda6efae Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3763841 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao be8739f2 2023-09-22T14:36:45 Vulkan: Fix StatInfo in vk_mem_alloc_wrapper.h to match VMA Right now we are defining our own StatInfo structure in vk_mem_alloc_wrapper.h to avoid inclusion of VMA header directly in other ANGLE code. This caused this struct no longer matches VMA's structure since VMA 3.0 switch. For quick fix, this CL just update StatInfo to match VMA 3.0 define. Bug: b/301653706 Change-Id: Ic510c362f30d9296a13964e6ba9c617e80e49ceb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4888625 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 26148a02 2023-09-21T11:25:16 Vulkan: Minor cleanup of mPrevUploadedMutableTexture When texture is transit from mutable to immutable, we need to remove it from SharedGroupVk::mPrevUploadedMutableTexture if it is pointing to. Right now we did not clear the pointer, but rely on next texImage call to detect that mPrevUploadedMutableTexture is pointing to a immutable texture and then set it to new tetxure. This is a bit confusing since we only add a mutable texture to this mPrevUploadedMutableTexture pointer but at some point it becomes immutable. This CL changes to immediately reset the pointer when texture is respecified from mutable to immutable, and added assertion that mPrevUploadedMutableTexture is mutable. Bug: b/301289624 Change-Id: I97a11616887367cd4c2069419fe17d3dea052b50 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4879087 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Amirali Abdolrashidi cf2c9c56 2023-08-17T10:45:51 Vulkan: Add VMA 3.0 support in ANGLE * Updated the VMA hash in the dependencies to the 3.0 version. * Updated ANGLE_VMA_VERSION in the build_override GN file to 3.0. * The ANGLE_VMA_VERSION in the root BUILD.gn is unchanged. * The flags and thresholds for the buddy algorithm are only used when the used VMA version is less than 3.0. * The general algorithm is used for all cases for VMA 3.0. Bug: b/295208838 Change-Id: I00a95a2c2513112f8888c40931da4e2e5db97e2b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4777337 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 52fe3116 2023-07-17T16:20:54 Vulkan: Deduplicate share group's context set tracking Bug: angleproject:8224 Change-Id: I7a59a37229682fb91ff777f31e02e05d7ab2b80f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4690345 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 8049d082 2023-04-20T16:13:34 Vulkan: Split ShareGroupVk class from DisplayVK into its own files When ShareGroupVk class was introduced, it is a bit of convenience to put it in the DisplayVk.h and DisplayVk.cpp files. Now we have added more and more code into ShareGroupVk class and it deserves to have its own files. This CL added two files ShareGroupVk.h and ShareGroupVk.cpp and moved the class into the new files. No functional change is expected. Bug: None Change-Id: I8683a3dc4192612d6ec8abbc7f00424958f09598 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4454639 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>