src/libANGLE/renderer/vulkan


Log

Author Commit Date CI Message
Shahbaz Youssefi f2315dbe 2024-10-23T13:34:39 Reland: Vulkan: Update checks for promoted extensions This relands commit c2219ef9ec03277b6f8ad18d6d1ade41ddf88ba6. Features that depend on promoted extensions are now enabled when the extensions are present, OR the version of Vulkan that they were promoted to is present. This commit checks for Vulkan 1.1 because that is the version currently supported. In the reland, the promoted extensions are not added to the list of extensions to be enabled, because the underlying driver may not have exposed them as extensions at all. Bug: angleproject:374483183 Change-Id: I98e004d3fb4ed673984859ab63d40702f877b535 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5955635 Reviewed-by: Jason Macnak <natsu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 2dcc80dd 2024-10-17T13:59:23 Vulkan: allocateDescriptorSet to avoid repeated try on same pool DynamicDescriptorPool::allocateDescriptorSet has a few steps. It first tries to allocate from the same pool. Then tries to allocate from mCurrentPoolIndex and then loops all existing pools. This CL keeps the same basic logic, but avoids repeated tries on the same pool. Bug: angleproject:372268711 Change-Id: Ic3099ac8c68688fe9afe452f808be29ac9063d51 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5926182 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop a05fc2bc 2024-10-23T13:36:54 Revert "Vulkan: Update checks for promoted extensions" This reverts commit 9c1f96b8606a564b565d37208268b9b06efff03e. Reason for revert: Still fails on Cuttlefish (which uses SwiftShader) Bug: angleproject:374975259 Original change's description: > Vulkan: Update checks for promoted extensions > > Features that depend on promoted extensions are now enabled when > the extensions are present, OR the version of Vulkan that they were > promoted to is present. This commit checks for Vulkan 1.1 because > that is the version currently supported. > > Bug: angleproject:374483183 > Change-Id: I17d7956ac8a604f531e020e77c6f532e616b9dd5 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5954316 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:374483183 Change-Id: I1bef03f99b044bca91950a62e4015630a7c91530 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5956483 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Auto-Submit: Cody Northrop <cnorthrop@google.com>
Charlie Lao 9a4c7495 2024-10-15T13:05:28 Vulkan: Add feature flag to enable descriptorSet cache So that we can disable it to compare the performance difference. Bug: angleproject:372268711 Change-Id: I02da254e5d58815741080634a2dd005617aa7432 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5936135 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 31c80bbf 2024-10-17T10:56:16 Vulkan: Avoid redundant work in updateFullActiveTextures ContextVk keeps mActiveTexturesDesc, which gets updated by UpdatePreCacheActiveTextures(). This is only used for cache lookup. When there is a cache miss, we end up call updateFullActiveTextures() which recomputes DescriptorSetDesc again, which is redundant work. This CL removes mActiveTexturesDesc from ContextVk. UpdatePreCacheActiveTextures has been changed to be a DescriptorSetDescBuilder method so that it can directly update the mDesc. updateFullActiveTextures has been renamed to updateActiveTexturesForCacheMiss which avoid mDesc calculation. updateFullActiveTextures is still kept for now which will be used in next CL when cache is disabled. Bug: b/372268711 Change-Id: Ic9a0cdaa7cefca5f72b599d26d079cef14888f07 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5905766 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao dd54eeec 2024-10-11T13:26:46 Reland "Vulkan: Track GPU progress for individual DescriptorSet" This is a reland of commit 292102944add2ab30f4aa12a971cac456cc7726b with the fix of garbage being added back to garbage list. Original change's description: > Vulkan: Track GPU progress for individual DescriptorSet > > Right now ProgramExecutableVk keeps VkDescriptorSet object, and > DescriptorSetHelper is created when a cache entry becomes invalid. > Further, DescriptorSetCache keeps the cache of {VkDescriptorSet, > RefCountedDescriptorPoolHelper} pair. So we are having three different > type of objects at different stages of life: VkDescriptorSet, > DescriptorSetHelper, and {VkDescriptorSet, > RefCountedDescriptorPoolHelper. This CL makes DescriptorSetHelper at > creation and at cache and at garbage. With this change, you have a > reference counted DescriptorSetHelper object (i.e, DescriptorSetPointer) > during entire life cycle and is passed around between cache and program > as is. This CL is preparation for the future CL where we may disable > cache for descriptorSet. The descriptorSet will be added to garbage list > and reused constantly without go through the cache code. We need to > track the individual descriptorSet with ResourceUse so that it won't > reuse until GPU is finished. This CL is making DescriptorSetHelper a GPU > tracking object so that it will still just work when cache is disabled. > > Bug: angleproject:372268711 > Change-Id: I1cfb77cc5069b202d870388fd8809e265cdca90b > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5918586 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Yuxin Hu <yuxinhu@google.com> Bug: angleproject:372268711 Change-Id: Ic920f99cc78cde1e94690bdbee3b885844fa155b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5954701 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Austin Annestrand 60da450e 2024-09-20T17:56:55 CL: Implicit cmd queue submit on release From OpenCL spec (3.0): https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#_flush_and_finish clReleaseCommandQueue perform an implicit flush of the command-queue. Bug: angleproject:8639 Change-Id: I0a3b0f3c602075fd2a6e1ac0310345b3d568df64 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5410931 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 45cc47af 2024-10-22T21:41:22 Revert "Vulkan: Track GPU progress for individual DescriptorSet" This reverts commit 292102944add2ab30f4aa12a971cac456cc7726b. Reason for revert: Causing bot failure in later CLs Original change's description: > Vulkan: Track GPU progress for individual DescriptorSet > > Right now ProgramExecutableVk keeps VkDescriptorSet object, and > DescriptorSetHelper is created when a cache entry becomes invalid. > Further, DescriptorSetCache keeps the cache of {VkDescriptorSet, > RefCountedDescriptorPoolHelper} pair. So we are having three different > type of objects at different stages of life: VkDescriptorSet, > DescriptorSetHelper, and {VkDescriptorSet, > RefCountedDescriptorPoolHelper. This CL makes DescriptorSetHelper at > creation and at cache and at garbage. With this change, you have a > reference counted DescriptorSetHelper object (i.e, DescriptorSetPointer) > during entire life cycle and is passed around between cache and program > as is. This CL is preparation for the future CL where we may disable > cache for descriptorSet. The descriptorSet will be added to garbage list > and reused constantly without go through the cache code. We need to > track the individual descriptorSet with ResourceUse so that it won't > reuse until GPU is finished. This CL is making DescriptorSetHelper a GPU > tracking object so that it will still just work when cache is disabled. > > Bug: angleproject:372268711 > Change-Id: I1cfb77cc5069b202d870388fd8809e265cdca90b > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5918586 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Yuxin Hu <yuxinhu@google.com> Bug: angleproject:372268711 Change-Id: I4d3c34058d100112a098144276b52c0faf8d593a No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5955529 Auto-Submit: Charlie Lao <cclao@google.com> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Andrew Sumsion 9c1f96b8 2024-10-22T12:58:27 Vulkan: Update checks for promoted extensions Features that depend on promoted extensions are now enabled when the extensions are present, OR the version of Vulkan that they were promoted to is present. This commit checks for Vulkan 1.1 because that is the version currently supported. Bug: angleproject:374483183 Change-Id: I17d7956ac8a604f531e020e77c6f532e616b9dd5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5954316 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Rafay Khurram 99ba07d3 2024-03-26T00:58:57 CL/Vulkan: Implement createImage Enabling functionality of: - clCreateImage Tests-Passing: OCLCTS.test_api get_image<1d|2d|3d>_info Bug: angleproject:42266936 Signed-off-by: Rafay Khurram <r.khurram@samsung.com> Change-Id: I0281f092bff13cdd81b87d596fdd15b33dda7e46 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5796527 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 29210294 2024-10-11T13:26:46 Vulkan: Track GPU progress for individual DescriptorSet Right now ProgramExecutableVk keeps VkDescriptorSet object, and DescriptorSetHelper is created when a cache entry becomes invalid. Further, DescriptorSetCache keeps the cache of {VkDescriptorSet, RefCountedDescriptorPoolHelper} pair. So we are having three different type of objects at different stages of life: VkDescriptorSet, DescriptorSetHelper, and {VkDescriptorSet, RefCountedDescriptorPoolHelper. This CL makes DescriptorSetHelper at creation and at cache and at garbage. With this change, you have a reference counted DescriptorSetHelper object (i.e, DescriptorSetPointer) during entire life cycle and is passed around between cache and program as is. This CL is preparation for the future CL where we may disable cache for descriptorSet. The descriptorSet will be added to garbage list and reused constantly without go through the cache code. We need to track the individual descriptorSet with ResourceUse so that it won't reuse until GPU is finished. This CL is making DescriptorSetHelper a GPU tracking object so that it will still just work when cache is disabled. Bug: angleproject:372268711 Change-Id: I1cfb77cc5069b202d870388fd8809e265cdca90b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5918586 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 47c66901 2024-10-21T12:47:22 Vulkan: Set gl_Layer to 0 if the framebuffer is not layered Bug: angleproject:372390039 Change-Id: I29067c9488e06f6dd2e90f207fecb843267fb77c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5949263 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop e869b426 2024-10-22T10:04:06 Revert "Removed checks for promoted extensions" This reverts commit c2219ef9ec03277b6f8ad18d6d1ade41ddf88ba6. Reason for revert: Possible cause of boot failures on cuttlefish Bug: angleproject:374975259 Original change's description: > Removed checks for promoted extensions > > Removed checks for Vulkan extensions that have been promoted into Vulkan > 1.1, which is already the minimum required version for ANGLE. The > dependent features now work when the extensions are missing because the > extensions are no longer necessary. > > Bug: angleproject:374483183 > Change-Id: Iad92b33a8e724eaa8f4bfcbe406f5b6b8536d6d8 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5944678 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Charlie Lao <cclao@google.com> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: angleproject:374483183 Change-Id: I92eb6681c6d1b8f7e2d0832bb4e1cbf4597bd1c6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5952279 Commit-Queue: Cody Northrop <cnorthrop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 4bdcdf0d 2024-10-16T11:44:49 Vulkan: Switch RefCountedDescriptorPoolBinding to use SharedPtr This mostly a clean up. RefCountedDescriptorPoolBinding is replaced with DescriptorPoolPointer, which is defined as SharedPtr<DescriptorPoolHelper>. It has more intuitive semantics to use. Bug: angleproject:372268711 Change-Id: I0397111b5228e896c1d226e00930851319d955a0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5938947 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao c52e8493 2024-10-11T14:21:19 Vulkan: Switch DescriptorPoolPointer to use SharedPtr To make the reference counting easier to maintain, SharedPtr class is added to automatically tracking the reference counting and object creation/destruction. Right now we have BindingPointer class doing similar things except it does not automatically manage the object create/destroy, which makes it less robust as well as redundant code to manage object life cycle. The other problem with BindingPointer is that it does not work with normal assign/copy operator which made it hard to read and use. SharedPtr uses exact same API semantics as std::shared_ptr, which makes the reference counting very easy to use. The main difference of SharedPtr and std::shared_ptr is that it does not use any atomic or lock since it assumes user only uses it under thread safe environment, which ANGLE's backend is. This CL also changes mDescriptorPools to mDynamicDescriptorPools to make it clear that it is dynamic descriptor pool not the descriptor pool. This is also preparation CL for the next CL where we will use SharedPtr to manage DescriptorSetHelper life cycle, which otherwise a bit complicated to manually manage. Bug: angleproject:372268711 Change-Id: I1033d9bf259bbc075a9b374d8a28e1f67d889873 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5926183 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi a19f0947 2024-10-17T22:42:30 Vulkan: Cache depth- and stencil-only views Existing depth/stencil blit and resolve paths created temporary depth- and stencil-only views. For GL_ARM_shader_framebuffer_fetch_depth_stencil, such views are needed as well. In preparation for that extension, this change adds depth- and stencil-only views to ImageViewHelper and allows them to be retrieved through RenderTargetVk. The blit and resolve paths are consequently simplfied as a side-effect. Bug: angleproject:352364582 Change-Id: Ia822efb44ca7c82f63afce904eb19dd1bed02ff5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5938149 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Andrew Sumsion c2219ef9 2024-10-20T04:49:44 Removed checks for promoted extensions Removed checks for Vulkan extensions that have been promoted into Vulkan 1.1, which is already the minimum required version for ANGLE. The dependent features now work when the extensions are missing because the extensions are no longer necessary. Bug: angleproject:374483183 Change-Id: Iad92b33a8e724eaa8f4bfcbe406f5b6b8536d6d8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5944678 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 323187d9 2024-10-11T13:48:51 Vulkan: Fix color attachment limit with framebuffer fetch ANGLE incorreclty assumed that the input descriptor limit is at least as big as the color attachment limit. This is not true on Intel/windows where 8 color attachments are available but only 7 input descriptors. With this change, the color attachment limit is dropped to 7 in such a case so that framebuffer fetch can continue to be supported. Bug: angleproject:372873263 Change-Id: If836563b47399a23b293b74815f6bccb21aaf47c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5919759 Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Rafay Khurram 3fa74223 2024-03-26T17:13:52 Vulkan: Add check for VK_EXT_external_memory_host extension Tests-Passing: GN Build Bug: angleproject:42266936 Change-Id: Ie30f1cee939bc8a4b98d37f718e4526156916f05 Signed-off-by: Rafay Khurram <r.khurram@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5796524 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 897a5654 2024-10-16T10:32:16 CL: Rename isSet/isNotSet to intersects/excludes In particular, `isSet` was checking if _any_ bit was set instead of if _all_ bits were set. This was a point of confusion. Bug: angleproject:42266936 Change-Id: I76211a423f304fb4641ceb9cbfbb0bea4ff33ccf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5937411 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi e40d8581 2024-10-16T10:57:39 Vulkan: Fix render pass revival vs framebuffer fetch and DR Bug: angleproject:352364582 Change-Id: I86548251fc1dec75031a23e3461bf296c852919c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5937412 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi 7beb008d 2024-10-16T10:04:43 Vulkan: Disable dynamic rendering on Nvidia Bug: angleproject:372883691 Change-Id: I71b45ea67a725a5a55d69b17329866000a1f37e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5938740 Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jiaqi Li 0dbe85f3 2024-10-15T13:54:36 Increase the size of vector WriteImages to max ANGLE limits the size of vector which represents the write images when resolving images. So when blit a multisample buffer to mrt, the sum of write images is more than 1 and app will abort while checking the size of the vector. This patch increases the size of vector WriteImages to max. Add end2end test to test blit multisampled framebuffer to MRT framebuffer. Bug: angleproject:361369302 Change-Id: I2d892bcd3411f2bca2ff514f6f0b6055d872668a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5872512 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 91391c06 2024-10-02T16:07:02 Vulkan: Vertex attribute hole crash workaround * Added condition to bypass reading from a streaming attribute if the source pointer is null. * Added unit test that crash if a vertex pointer is not defined for an enabled vertex attribute. * VertexAttribPointerCopyBufferFromInvalidAddress * Credit for the original test: tingwei.guo Bug: angleproject:359729255 Change-Id: I2592fed66f0eba8c7003ec02cc8ca802833f23b3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5899978 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi a1584f49 2024-10-11T21:17:32 Vulkan: Qualify framebuffer fetch with "Color" In preparation for depth/stencil framebuffer fetch, many framebuffer fetch symbols are affixed with Color to indicate that they pertain to color framebuffer fetch logic. Bug: angleproject:352364582 Change-Id: I86000ada5e6ef47387dec0b6a3fca589d816cdc2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5926593 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 1608d0be 2024-10-10T16:53:15 Vulkan: Isolate framebuffer fetch no-RP-break optim from DR Prior to [1], changes to framebuffer fetch usage by shaders caused a render pass break. This was due to a limitation of render pass compatibility rules. It also caused other headache, such as needing to clear the render pass cache, recreating pipelines etc. [1]:https://chromium-review.googlesource.com/c/angle/angle/+/3697308 In [1] an important optimization was implemented for tiling GPUs where ANGLE permanently switched to framebuffer fetch mode on first encountering framebuffer fetch use. From that point on, ANGLE would always make every render pass framebuffer fetch compatible. In reality, the render pass break was unnecessary, which became apparent with dynamic rendering (for example that whether the render pass includes input attachments has no bearing on a pipeline that doesn't use input attachments at all). In [2], dynamic rendering kept the render pass break + permanent switch behavior for simplicity. [2]:https://chromium-review.googlesource.com/c/angle/angle/+/5637155 This change untangles the optimization done for legacy render passes from dynamic rendering, allowing dynamic rendering to start every render pass without framebuffer fetch and enable it later if a framebuffer fetch program is used. This is in preparation for supporting depth/stencil framebuffer fetch, where a perma-switch is troublesome (for example in combination with read-only depth/stencil feedback loops). Bug: angleproject:352364582 Change-Id: I31221cf22a28d58b9b2bf188e9c0b786cd0fe3d2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5923120 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Mohan Maiya 8f367854 2024-10-13T13:45:17 Vulkan: Refactor ImageCopy shader - Refactor common shader code into "ImageCopy.inc" - Add ImageCopyFloat shader that supports only float src and dst formats - Perform YUV and multisampled image copies with ImageCopyFloat Bug: angleproject:372059358 Change-Id: I34bbaf49f98920494d9ed9e1fd290b413a89ea13 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5927276 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Aurora Zhang 78a694a1 2024-10-10T14:08:31 Bugfix for ms_to_ss in dynamic rendering VkMultisampledRenderToSingleSampledInfoEXT should be added into VkRenderingInfo.pNext when using dynamic rendering pass. Bug: angleproject:370153437 Change-Id: If9377362d95c60e610ec978eb684918de9807342 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5922915 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 68de0042 2024-10-08T05:41:37 Vulkan: Support glCopyTexImage2D from MSAA default framebuffer Add support for glCopyTexImage2D when the source is an MSAA default framebuffer by enhancing UtilsVk::copyImage(...) to support multisampled source images. Bug: angleproject:372059358 Tests: MultisampleTestES3.CopyTexImage2DFromMsaaDefaultFbo* Change-Id: I9b5d39f6f75ca8056f8be18b1e68eb0161c99903 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5914629 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi b724eb0e 2024-10-10T16:51:11 Vulkan: Fix assert with overlay and not dynamic rendering The render pass started by UtilsVk for the overlay was not marked as belonging to the default framebuffer, causing an incorrect assertion failure where the final image layout was to be set to PRESENT_SRC. Bug: angleproject:42267038 Change-Id: I6e7a9357378d6f9a6e907e0ba25fb64dc8f7540e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5923119 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 62f33a5c 2024-10-09T16:06:54 Vulkan: Make retainResource for descriptorSetPool consistent Right now the cache hit and cache miss case are handled differently. This CL makes it consistent. Now Caller of DynamicDescriptorPool::getOrAllocateDescriptorSet will handle this retainResource call regardless of cache hit or miss. Bug: b/372268711 Change-Id: I11e47ab9e56a24eb68a0231c5e553ab6b8833c82 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5921640 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 3e8d09a1 2024-10-08T17:01:02 Vulkan: Enable FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM ANGLE correctly handles MRT with gl_LastFragColorARM, this property should have been set to true. Bug: b/269233744 Change-Id: Iaa554df57292fcc5c12281e2e098b6451f63d5e6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916770 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Cody Northrop ba292370 2024-10-08T19:58:29 Vulkan: Disable imageless framebuffers on Qualcomm and PowerVR * Qualcomm with imageless framebuffers, vkCreateFramebuffer loops forever * PowerVR with imageless framebuffer spends enormous amounts of time in framebuffer destruction and creation. ANGLE doesn't cache imageless framebuffers, instead adding them to garbage collection, expecting them to be lightweight. Tests: dead_cells, chrono_trigger, batman_telltale Bug: b/369693310, b/372273294 Change-Id: I43714154661c4415ec10511ed096da7c23a9a8ef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5918740 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Cody Northrop <cnorthrop@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi 878e1c92 2024-10-07T16:34:54 Vulkan: Fix line-loop draw arrays after elements Currently, when drawing line-loop arrays in Vulkan, an index buffer is created to assist in drawing (since Vulkan does not natively include a line-loop draw mode). However, when LL array draw calls are mixed with non-LL element draw calls, it can lead to some rendering issues due to the fact that the proper index buffer is not obtained. * In VertexArrayVk::handleLineLoop(), if the cached indices are the same as the last draw, the same index buffer is obtained from the LineLoopHelper object. * (Using the newly added getCurrentIndexBuffer()) * Added unit test in which a triangle element draw is places between two LL array draws. Before the fix, the second LL draw would result in an incorrect line draw. Bug: chromium:40911000 Change-Id: Ibba9a0cb2b77a2b6ae2c1e9230afe3d16b70cb63 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5908694 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Geoff Lang 166b72c9 2024-09-30T19:07:26 GL_ANGLE_blob_cache implementation. Bug: chromium:370538323 Change-Id: Ic51a951e78b48b315e36f518bcc39ff2d54660a6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5900761 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Mohan Maiya b3d85cce 2024-09-30T14:28:35 Vulkan: Consolidate write colorspace override states ColorspaceState struct is now used to cache write colorspace related states to determine the colorspace of Vulkan draw image views. ImageViewHelper methods are called during initialization and when colorspace related states are toggled dynamically which in turn process these states and determine the final write colorspace. We can now fully support rendering to EGLImages, with colorspace overrides, via texture or renderbuffer EGLImage targets Bug: angleproject:40644776 Tests: ImageTest*Colorspace*Vulkan MultithreadingTestES3.SharedSrgbTextureMultipleContexts*Vulkan ReadPixelsPBOTest.SrgbUnorm*Vulkan Change-Id: I2be2cd3b5b2b4ac8ecb803c34cde2b846cbd1cbe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5901256 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Mohan Maiya b38cc7fa 2024-09-30T12:43:09 Vulkan: Consolidate read colorspace override states ColorspaceState struct is now used to cache read colorspace related states to determine the colorspace of Vulkan read image views. ImageViewHelper methods are called during initialization and when colorspace related states are toggled dynamically which in turn process these states and determine the final read colorspace. Bug: angleproject:40644776 Tests: ImageTest*Colorspace*Vulkan SRGBTextureTest.SRGB*TextureParameter*Vulkan SRGBTextureTestES3.SRGBDecodeTexelFetch*Vulkan Change-Id: I16b3666cd80865936b826dc0738fc9210dabeda9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5901255 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Mohan Maiya 605c2f85 2024-09-27T12:00:58 Vulkan: Bugfix in FramebufferVk::blit(...) If any color attachment of GL_DRAW_FRAMEBUFFER is already in use in the currently started renderpass, don't reuse the renderpass for blit. Bug: angleproject:40644776 Tests: Texture2DTestES3.UnitTest_DMSAA_dst_read* Change-Id: Ib4266fc65d0ac7151f362f263e9e706adb1231ce Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5895158 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Gowtham Tammana f9709279 2024-09-20T16:02:56 CL/Vulkan: Add support for printf builtin processing The support for printf builtin in clspv enabled through the SPIR-V non-semantic clspv reflection instructions - PrintfInfo and PrintfBufferStorageBuffer [1]. The printf buffer is setup with a separate descriptor layout and the pipeline layout is updated accordingly. Also, printf is enabled as default option now for clspv. [1]: https://github.com/KhronosGroup/SPIRV-Registry/blob/master/nonsemantic/NonSemantic.ClspvReflection.html Bug: angleproject:369724757 Change-Id: I20b245eb0fea69941bd1aeb42534f8b729ec17e8 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5893958 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao b61f9f9e 2024-10-04T11:07:23 Vulkan: Add operator<< for descriptorSet for debugging Right now it is using streamOut() function which is hard to use with WARN(). This replaces the streamOut function with standard c++ operator<< so that we can use in WARN()/INFO() along with other logs for debugging. Bug: b/368566032 Change-Id: Iec98b4c59f360cbbfb8fbdd85d5d1150fcca8f4a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5908773 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao d147a2ca 2024-10-04T10:45:55 Vulkan: release descriptorSets from TextureVk::refreshImageViews When texture has to refresh its imageViews, the existing descriptorSet cache will become obsolete (because the cache key contains view's uniqueSerial). This CL proactively releases all cache so that we don't keep these invalid cache any more. Bug: b/368566032 Change-Id: I82a221b8b8fd072ee3a52b11264addba385526d5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5908772 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao eb4eaea9 2024-10-03T17:15:21 Vulkan: Improve SharedCacheKeyManager::addKey performance This function walks a vector of keys. When there are many keys this could be slow. Also when we have to grow the vector size, it involves memory reallocation which means copy the data from old storage to new storage. This CL changes mSharedCacheKeys to use std::deque instead of vector which solves storage reallocation problem. It also adds angle::BitSet64<64> to track all available (i.e., empty) slots in mSharedCacheKeys so that we don't have to loop most of time. You only loop all keys once to find all empty slots and then subsequent addKey() call will be O(1) until all empty slots are used. Bug: b/368566032 Change-Id: I4d32b461761f1cd64380f5527883b84357bb44c1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5908690 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi b16d105f 2024-10-03T10:25:32 Remove Desktop GL front-end support For Desktop GL applications, please use Zink! Bug: angleproject:370937467 Change-Id: Ie734634bb62a2e98c80e1b32d8b3d34624da3c04 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5905428 Reviewed-by: Geoff Lang <geofflang@chromium.org>
angle-autoroll 6024e9c0 2024-10-02T08:01:43 Manual roll VK-GL-CTS from 65470ff2e321 to 179dd9f858f0 (27 revisions) https://chromium.googlesource.com/external/github.com/KhronosGroup/VK-GL-CTS.git/+log/65470ff2e321..179dd9f858f0 2024-09-30 lorenzo@khronosgroup.org Fix build 2024-09-30 mark@igalia.com Support standalone executable builds on Android 2024-09-30 javed@igalia.com Add tests for draw count clamping with null index buffer 2024-09-30 piotr.byszewski@mobica.com Capture replay tests for VK_EXT_descriptor_buffer 2024-09-30 javed@igalia.com Add tests vkCmdDrawIndexedIndirectCount draw count clamping 2024-09-30 rgarcia@igalia.com Add R8 and R16 large image tests in host image copy test group 2024-09-30 ziga@lunarg.com Add missing linked shader object test case 2024-09-30 tapani.palli@intel.com Fix issues with GLX reset notification strategy 2024-09-30 kamil.goras@mobica.com Split KHR-GLES32.core.tessellation_shader.vertex.vertex_spacing 2024-09-30 jimblackler@google.com Handle resize events in EGL bounding box tests. 2024-09-30 lorenzo@khronosgroup.org Merge vk-gl-cts/vulkan-cts-1.3.9 into vk-gl-cts/main 2024-09-30 lorenzo@khronosgroup.org Merge remote-tracking branch 'vk-gl-cts/dev/VK_EXT_depth_clamp_control' into main 2024-09-30 lorenzo@khronosgroup.org Update Vulkan spec to 1.3.296 2024-09-30 lorenzo@khronosgroup.org Merge remote-tracking branch 'vk-gl-cts/dev/VK_KHR_compute_shader_derivatives' into main 2024-09-20 lorenzo@khronosgroup.org Update SPIRV-Tools, SPIRV-Headers, glslang, Vulkan-Docs, Vulkan-ValidationLayers external sources 2024-09-19 piotr.byszewski@mobica.com Check limits before running mapping_to_large_index DRLR test 2024-09-19 ziga@lunarg.com Test pipeline without render pass or VkPipelineRenderingCreateInfo 2024-09-19 piotr.byszewski@mobica.com Remove invalid dynamic rendering local read tests 2024-09-19 piotr.byszewski@mobica.com Fix pipeline binary graphics tests 2024-09-19 piotr.byszewski@mobica.com Fix pNext chain loop in FSR tests 2024-09-19 kamil.goras@mobica.com Split KHR-Single-GL46.arrays_of_arrays 2024-09-19 marcin.hajder@mobica.com Port KC-CTS tests to VK-GL-CTS (glGetUniform), PART 11 2024-09-19 marcin.hajder@mobica.com Port KC-CTS tests to VK-GL-CTS (scissor_blit), PART 12 2024-09-19 marcin.zajac@mobica.com Suballocated DRM images 2024-09-19 piotr.byszewski@mobica.com Test feedback loop with dynamic rendering local read 2024-09-19 lorenzo@khronosgroup.org Merge vk-gl-cts/vulkan-cts-1.3.9 into vk-gl-cts/main 2024-09-18 jimblackler@google.com Fix error in test logging in all CtsDeqpTestCases If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/vk-gl-cts-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: None Change-Id: Idbc50f78119327844e1488db25d58c1c588f9ff6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5903935 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Gowtham Tammana b5d548bb 2024-09-20T17:06:54 CL/Vulkan: Update map interface for CLMemoryVk Clean up the map interface of the CLMemoryVk to account for any offsets. Bug: angleproject:369724757 Change-Id: I12c7bf2f7f94cd7fbf57a8ee10748d2275a2ba70 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5893956 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Gowtham Tammana 0a452697 2024-09-19T16:33:26 CL/Vulkan: Enable support for multiple descriptor set handling The clspv transcompiler can generate multiple descriptor sets depending on the kernel e.g. printf storage buffer is setup in a separate descriptor set, and kernel arguments in a separate descriptor set. This change enables setting up of multiple descriptor sets and appropriately bind them. Also, creation of descriptor set and pipeline layout are deferred to kernel enqueue time as it is quite possible that kernels are built in a batch before their use. Bug: angleproject:369724757 Change-Id: I80eb93f4a3b8afc7461c299cc283526cc4b872fa Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5893955 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Gowtham Tammana 371539c3 2024-09-19T16:26:44 CL/Vulkan: Move descriptor set and pipeline layout cache to context Move the descriptor set and pipeline layout caches to context so that cache is shared across programs. Bug: angleproject:369724757 Change-Id: I517d0cc712adb3f8b91d68e5bca8d3ac3ddb39ff Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5893954 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jiewei Qian 435bd0a9 2024-10-02T16:37:06 ssci: use canonical date format Bug: chromium:370881022 Change-Id: Ie8a310b11517fd1be7f95f246bcb9cfe48d95791 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5903336 Auto-Submit: Jiewei Qian <qjw@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Gowtham Tammana cc44090d 2024-09-18T12:28:53 Vulkan: Add an extra descriptor set index In the case of CL, the clspv transcompiler can generate upto four descriptor set indices, so add an extra index to vk::DescriptorSetIndex. Also, adding aliases for CL specific naming. Bug: angleproject:369724757 Change-Id: I45ef8a6d9246c7863ebc6edf08479bc7c661c151 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5893953 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Imran Ziad 0040cda1 2024-09-25T18:16:36 Vulkan: Invalidate host visible non-coherent buffers on mapping We can not trust the cache during CPU readback when the buffer memory type is non-coherent. Bug: b/366134076 Change-Id: I89920cfa468ee0be0feb607fea9d60bc0732191f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5890707 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Imran Ziad <imranziad@chromium.org>
Amirali Abdolrashidi 67a5ea45 2024-09-23T16:09:12 Vulkan: Fix the error from multiple lineloop draws Since Vulkan does not support line-loop draws natively, such a draw call requires the conversion of the related buffers to prepare them for this operation. For glDrawElementsIndirect(), the index and the indirect buffers would need conversion. However, what currently happens in this case is that the original buffer pointer is overwritten after the conversion, removing the link to the original buffer. Therefore, if there is a second line-loop call just after the first, it will try to use the converted buffer as the new source, which leads to errors due the buffer already being in use. The index buffer for the draw is bound when the related dirty bit is handled. Therefore, instead of using the draw index buffer directly for handling the line-loop scenario, we can use the index buffer in the form of a local pointer passed between functions. Then, in order to reconcile line-loop with the other cases, the draw index buffer is set just before setting up the indexed draw. * Functions handling line-loop draws do not modify the element array buffer in VertexArrayVk directly, but use local buffer pointers to pass the current element array pointer to further processing and drawing. * Added mCurrentElementArrayBuffer for ContextVk to be bound to the index buffer to used for draw instead of the one from its vertex array object. * Before the indexed draw, mCurrentElementArrayBuffer is set to the last destination index buffer. * Added unit test that makes a line-loop draw and then a non-LL call using the same element array. Bug: angleproject:360758685 Change-Id: I6d6328f6326c1a1f9f80e5ef346aa077c867d344 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5878764 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Juston Li e06b07a9 2024-09-27T18:17:16 Vulkan: populate ycbcr conversionDesc for yuv VkFormats For this case, the external format has a vulkan equivalent VkFormat and is YUV, so conversionDesc needs to be populated. YcbcrConversionDesc::update() expects externalFormat to be 0 in this case since it has an equivalent. Bug: b/368429977 Bug: b/352595520 Change-Id: Ifdae7a539555d78bbbf9d11cdbb946cb815c7709 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5896250 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 7c811715 2024-09-25T11:09:44 Vulkan: fix crash when clearing stencil with ClearBuffer Follow up to [1] which fixed a crash with glClear, but the bug remained with glClearBufferiv. This change refactors the "is stencil write masked out" query to always take the framebuffer's stencil bit count into account (practically always 8), which also happens to make the rest of the code checking this query more accurate in the presence of nonsense masks where the bottom 8 bits are 0. [1]: https://chromium-review.googlesource.com/c/angle/angle/+/3315158 Bug: chromium:40207259 Bug: angleproject:42266334 Change-Id: I68a6b0b75c67ed2cdc8c4d03b243efe5495efce1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5889788 Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 994bbbfc 2024-09-23T23:30:10 Vulkan: Don't require renderability in AHBs If the AHB usage includes GPU_FRAMEBUFFER, in practice it should be impossible for the corresponding Vulkan format to not be renderable. However, to guard against potential driver bugs, renderability is still checked if the AHB usage includes that bit. Bug: b/368429977 Change-Id: Iae23432c369cd933f14c143f67c08720d76009fc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5881904 Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Hao Li 2af09236 2024-09-24T13:55:04 Vulkan: Enable monolithic pipelines on Intel Windows The hang issue is fixed and not reproduced on Intel Windows drivers 101.5379 and later. Bug: angleproject:369043994 Change-Id: Ic395ca47e65fa6467baf09e54b7e24c0d7d71ad3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5885989 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Yuxin Hu eaffa034 2024-09-24T20:56:04 Revert "Vulkan: Consolidate colorspace override states" This reverts commit bffcd235ba6c031603d798daaa98f1cf9a3f3e46. Reason for revert: Breaks Android test `org.skia.skqp.SkQPRunner#UnitTest_DMSAA_dst_read`. Details: https://b.corp.google.com/issues/369388539. Original change's description: > Vulkan: Consolidate colorspace override states > > ColorspaceState struct is now used to cache colorspace related states > and used to determine the colorspace of Vulkan image views. > ImageViewHelper methods are called during initialization and when > colorspace related states are toggled dynamically which in turn process > these states and determine the final read and write colorspaces. > > We can now fully support rendering to EGLImages, with colorspace > overrides, via texture or renderbuffer EGLImage targets > > Bug: angleproject:40644776 > Tests: ImageTest*Colorspace*Vulkan > MultithreadingTestES3.SharedSrgbTextureMultipleContexts*Vulkan > SRGBTextureTest.SRGB*TextureParameter*Vulkan > SRGBTextureTestES3.SRGBDecodeTexelFetch*Vulkan > ReadPixelsPBOTest.SrgbUnorm*Vulkan > Change-Id: I1cc2b5bd834b519b83deab4d80a2fcaabeb271d6 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5841290 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Charlie Lao <cclao@google.com> > Commit-Queue: mohan maiya <m.maiya@samsung.com> Bug: angleproject:40644776 Change-Id: I5bf6cf2ed0c8ec22fc02d8c3da92673ee85fe002 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5888506 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Igor Nazarov f5f419ec 2024-09-04T20:22:20 Vulkan: Add verify-restore in CompressAndStorePipelineCacheVk() Change fixes following problem: When blob cache is full, but still allows to store the current pipeline cache data, storing next chunk may trigger eviction of already stored items. Depending on the blob cache implementation, eviction process may choose to evict chunks from the current pipeline cache data. As the result: blob cache will not contain all chunks. Solution: The `StorePipelineCacheVkChunks()` function now check what chunks exist in the blob cache (if `lastNumStoredChunks` parameter is positive) and restores any missing chunks if their number is less than `lastNumStoredChunks`. First call to `StorePipelineCacheVkChunks()` passes zero (0) to the `lastNumStoredChunks`, which will skip the check and store all chunks unconditionally. If "verifyPipelineCacheInBlobCache" feature is enabled, the `StorePipelineCacheVkChunks()` will be called again to restore possibly missing chunks. If "hasBlobCacheThatEvictsOldItemsFirst" feature is disabled, the function will be called repeatedly in a loop (opposed to only once), until all chunks are present or until number of missing chunk stops decreasing. Bug: angleproject:4722 Change-Id: Ibbbdb2f878d6aafd7ab5586fc654e2b9be900a9a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5837042 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Shahbaz Youssefi a6ec0bb9 2024-09-23T10:50:28 Vulkan: Fix recursion in ensurePipelineCacheInitialized() If the initial data was loaded from the blob cache, this function called getPipelineCacheSize() to initialize mPipelineCacheSizeAtLastSync. However, that function itself lead back to ensurePipelineCacheInitialized(), causing a recursion. This was previously undiscovered as the conditions that would lead to the global pipeline cache needing a lock were yet to materialize in the wild. Since the preferMonolithicPipelinesOverLibraries feature was made more widely enabled in [1] and consequently a race condition was fixed in [2], this recursion was discovered as a deadlock due to the mutex use. While this change avoids the recursion, it simultaneously optimizes the syncPipelineCacheVk() function by making sure the lock is taken once intstead of twice when retrieving the pipeline cache size and subsequently data. This also avoids a previously encountered race condition where the pipeline cache was modified in between the two queries and VK_INCOMPLETE was returned from the second call. [1]: https://chromium-review.googlesource.com/c/angle/angle/+/5870466 [2]: https://chromium-review.googlesource.com/c/angle/angle/+/5872715 Bug: angleproject:42265839 Change-Id: Ic682b3d20ec4411ba180b3bafb807fdde8166d5b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5883153 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Steven Noonan <steven@uplinklabs.net> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com>
Roman Lavrov fdec6935 2024-09-20T16:29:03 Workaround supportsSurfaceMaintenance1 on Linux with llvmpipe Presence of multiple ICD appears to confuse the loader and we end up with support reported but vkGetPhysicalDeviceSurfaceCapabilities2KHR not actually working (see bug for more detials) Bug: angleproject:368647924 Change-Id: Idc813b99f873643d067cc4b4e38f1ed5249500b4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5875015 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
Shahbaz Youssefi 1e74ce33 2024-09-17T14:44:36 Reland "Vulkan: Prefer monolithic pipelines everywhere" This reverts commit 1503a10737e28ac9d1bb98c2f3e369880c63ca43. Reason for revert: Fixed threading + undo for buggy drivers Original change's description: > Revert "Vulkan: Prefer monolithic pipelines everywhere" > > This reverts commit e9ab557c744c29088174b6c7bc93692fe7f32dbd. > > Reason for revert: kills Windows Intel UHD 770 machines > http://anglebug.com/42265839#comment34 > > Original change's description: > > Vulkan: Prefer monolithic pipelines everywhere > > > > Apparently, every vendor prefers this, and > > graphicsPipelineLibraryFastLinking has no bearing on the driver's > > preference. > > > > Bug: angleproject:42265839 > > Change-Id: Ied8d82e0a9e08fe5efe3f625e2612764f67f9768 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5861024 > > Commit-Queue: Yuxin Hu <yuxinhu@google.com> > > Reviewed-by: Yuxin Hu <yuxinhu@google.com> > > Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> > > Bug: angleproject:42265839 > Change-Id: I95fa61b2242684b63adc2841b777bde923e34d41 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5868055 > Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> > Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Bug: angleproject:42265839 Change-Id: I007a3efc69e0edc040b0feddcd84e191f68ded9d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5870466 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya bffcd235 2024-09-13T14:58:00 Vulkan: Consolidate colorspace override states ColorspaceState struct is now used to cache colorspace related states and used to determine the colorspace of Vulkan image views. ImageViewHelper methods are called during initialization and when colorspace related states are toggled dynamically which in turn process these states and determine the final read and write colorspaces. We can now fully support rendering to EGLImages, with colorspace overrides, via texture or renderbuffer EGLImage targets Bug: angleproject:40644776 Tests: ImageTest*Colorspace*Vulkan MultithreadingTestES3.SharedSrgbTextureMultipleContexts*Vulkan SRGBTextureTest.SRGB*TextureParameter*Vulkan SRGBTextureTestES3.SRGBDecodeTexelFetch*Vulkan ReadPixelsPBOTest.SrgbUnorm*Vulkan Change-Id: I1cc2b5bd834b519b83deab4d80a2fcaabeb271d6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5841290 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi 167b9e8d 2024-09-18T21:51:38 Vulkan: Fix pipeline cache store vs monolithic pipeline race The thread that creates monolithic pipelines needs to hold the pipeline cache lock, as well as the thread that stores the pipeline cache contents to the blob cache. Bug: angleproject:42265839 Change-Id: I17cf9d2bb3f27d531f368003cb4ee00007a464fa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5872715 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Austin Annestrand 1bed7fdd 2024-09-13T15:29:07 CL/VK: Fix missed PushConstantRegionGroupOffset Adding missing reflection instruction to parser: NonSemanticClspvReflectionPushConstantRegionGroupOffset And add related PC routine during NDRangeKernel. Bug: angleproject:366412385 Change-Id: I2ffa48dee46a23840390312f20e7103f68daa0c5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5860310 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Austin Annestrand cce1497c 2024-06-07T15:03:07 CL/Vulkan: regionOffset as GWO for uniform clspv states: region_offset: the sum of the global ID offset into the NDRange for this uniform region and the global offset of the NDRange Since we currently do not support non-uniform at the moment, we just treat the PushConstantRegionOffset as the global work offset. Bug: angleproject:366412385 Change-Id: Ifd9953f21cd7826198b2cfe7d30ddec68ea2c7a0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5860309 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Austin Annestrand 741e5355 2024-06-07T16:39:53 CL/Vulkan: Add missing PushConstantNumWorkgroups Adding support for: NonSemanticClspvReflectionPushConstantNumWorkgroups Bug: angleproject:366412385 Change-Id: Id4cfc1ee456d3a7f6d058f3f4a6a580381b2d471 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5860308 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Austin Annestrand 8eecc8e9 2024-05-30T13:30:08 CL/Vulkan: Update CL_DEVICE parameters Update device fields for the following: - Change address bits from 64 -> 32 - Report OpenCL C version to 1.2 - Change non-uniform wgs support to false We either did not support nor take full advantage of these features, thus leading to the omission or change/downgrade. Bug: angleproject:366412386 Change-Id: Ia6b361d0285d5a1a88013a49fd747a3d03db9655 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5860307 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov cb9d52f8 2024-09-11T15:26:49 Vulkan: Add Pipeline blob cache per chunk CRC check Each chunk now have it's own CRC value, that is calculated starting from beginning of the data up to the end of the chunk. This way last chunk will have CRC of the entire data, avoiding calculating it separately. The `GenerateCRC32()` was splint into `InitCRC32()` and `UpdateCRC32()` function, which supports calculating running CRC32. Calculating CRC this way has some performance hit, when using many small chunks. Increasing chunk size to at least 1 MB almost negates any overhead from running `UpdateCRC32()` multiple times. On S921B with locked frequencies, calculating CRC for 89 MB of data using single call took 7.13 ms and 13.34 ms, when using multiple calls. However even this difference is negligible, because compressing 291 MB of data to 89 MB took 9.22 seconds. Bug: angleproject:4722 Change-Id: Ic6f3245b3aa7319ac13502d2c43e1a084a9bc8b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5854709 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Igor Nazarov 8469debb 2024-09-04T20:04:10 Vulkan: Add dual slots in CompressAndStorePipelineCacheVk() Change fixes following problem: Currently, each call to `CompressAndStorePipelineCacheVk()` stores chunks in order, starting from 0. This overrides previously stored chunks. In case of app termination (kill) in the middle of this process, the entire cache data will be corrupted, since it will partially contain chunks from the new and old caches. Solution: In order to fix this problem, this change introduces `slotIndex` into the `chunkCacheHash` calculation. Slot index is managed by `vk::Renderer::getNextPipelineCacheBlobCacheSlotIndex()` method, which will alternate between 0 and 1 when "useDualPipelineBlobCacheSlots" feature is enabled, and always 0 otherwise. Additionally, chunk storing order is reversed: last chunk is stored first and the first (0 chunk) - last. This is done because 0 chunk is the first that is loaded in `GetAndDecompressPipelineCacheVk()` and used as indication that there is data in the cache. Writing it last, ensures that other chunks will be also available. When "useDualPipelineBlobCacheSlots" is enabled, each call to `CompressAndStorePipelineCacheVk()` will use slot index opposed to the slot that is stored in the cache, avoiding damaging existing data. After writing all chunks for a brief moment there may be 2 instances of the data. However, data for the previous slot will be immediately erased (by writing 1/0-sized blobs) starting from the 0 chunk. To control if erasing of old pipeline cache data will be erased by using 0-sized or 1-sized blobs blobs, added `useEmptyBlobsToEraseOldPipelineCacheFromBlobCache` feature. The `GetAndDecompressPipelineCacheVk()` function will iterate over each available slot index checking only 0 chunk until data is found. In case of the OpenCL API, features will always have following values: - "useDualPipelineBlobCacheSlots" -> false - "useEmptyBlobsToEraseOldPipelineCacheFromBlobCache" -> true Note: this solution requires 2X pipeline cache size space in the blob cache to work as expected, otherwise it will exacerbate other problem: When blob cache is full, but still allows to store the current pipeline cache data, storing next chunk may trigger eviction of already stored items. Depending on the blob cache implementation, eviction process may choose to evict chunks from the current pipeline cache data. As the result: blob cache will not contain all chunks. The above problem will be addressed in the follow up CL. Bug: angleproject:4722 Change-Id: I2920bc3d89263280cdfe0466446fca26415e2b25 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5756576 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Yuxin Hu 44b6203c 2024-09-02T16:23:44 Add new functions defined in VK_KHR_Synchronization2 extension Add vkCmdPipelineBarrier2 and vkCmdWriteTimeStamp2. The other functions introduced in VK_KHR_Synchronization2 are not being used at the moment. Bug: b/356985874 Change-Id: I4f8b432aee9b11debcb8abe8b3089f88ad7a069b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5832709 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Austin Annestrand 59f1e537 2024-09-03T17:56:47 CL/VK: Add ArgumentWorkgroup handling Each OpenCL kernel can have ArgumentWorkgroup args - which are treated as spec constants. Bug: angleproject:366415134 Change-Id: I2761010610e5b991e959006e7b78f1241a687960 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5860304 Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 7bdd5f77 2024-09-18T12:51:25 Vulkan: Remove syncval suppressions for fixed bugs Bug: angleproject:42265220 Change-Id: I282f77330867682eee121f67d5357658bf375844 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5873529 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Amirali Abdolrashidi e38d25b1 2024-06-21T18:22:32 Vulkan: Implement EXT_clear_texture * Added new functions to TextureVk to clear the image. * clearImage() * clearSubImage() * Both implemented via clearSubImageImpl(), with the former a special case of the latter. * For multisample or renderable images, stagePartialClear() from ImageHelper is called to add the update. * For single-sampled non-renderable images, a buffer is filled with the pixel data and applied to the image as a buffer update. * Added new update type: ClearPartial * Used for renderable textures. This includes multisample textures. * LOAD_OP_CLEAR is used in a render pass to perform the clear. * UtilsVk::clearTexture() * (Uses ClearTextureParameters) * Uses the following functions to get the VkClearValue from the input data and format: * GetVkClearColorValueFromBytes() * GetVkClearDepthStencilValueFromBytes() * ClearPartial updates can also be superseded and removed similar to Buffer updates. * Updated UtilsVk::startRenderPass() to accept a VkClearValue* as an input arg. If used, the render pass will use LOAD_OP_CLEAR. * Enabled the feature "clearTextureEXT" on Vulkan. * Added new unit tests in ClearTextureEXTTest for various formats and pixel sizes. * Added related multisample tests in FramebufferTest.cpp. * FramebufferTest_ES31.ClearTextureEXT* * Disabled some of the new tests failing using OpenGL. * Disabled stencil-only-related tests on Pineapple. Bug: angleproject:42266869 Change-Id: I89c631d68a4ed63d9991abe1783333255ade20dd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5778348 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Amirali Abdolrashidi 7c6f1c05 2024-08-20T17:50:00 Vulkan: Enable UtilsVk::startRenderPass() for DS Currently, UtilsVk::startRenderPass() assumes usage for color ops and only uses color aspect flags and layouts. This CL will add the option to use it for depth/stencil as well. * Added the aspect flags to the args of startRenderPass() * For the existing usage of this function, which use the color bit, the image layout "ColorWrite" is used as before. * For depth/stencil usage, the layout to be used therein will be DepthWriteStencilWrite. * The follow-up CL will use this. Bug: angleproject:42266869 Change-Id: I135df3b91064b6e711e6109e9e7b734bc6361396 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5801657 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Matthew Denton 7e462c22 2024-09-17T15:32:41 WGPU: Implement SetUniform() enough so GetUniform() works Lays out a shadow buffer for basic uniforms per-shadertype in std140, which is close to matching WGPU's layout. This does not actually pass the buffer to WGPU as a uniform buffer. GetUniform() just reads from the shadow buffer. This is copied from the VK backend and so some code is deduplicated. Bug: angleproject:42267100 Change-Id: I727dc9e09a7ccabbb617f148dd68590469883b07 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5867444 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Matthew Denton <mpdenton@chromium.org> Reviewed-by: Liza Burakova <liza@chromium.org>
Igor Nazarov dfa516ce 2024-09-12T15:25:08 Vulkan: Fix chunkIndex is not 16 bits when computing key Replace `uint8_t` with `size_t` in `ComputePipelineCacheVkChunkKey()`. This fixes the bug and also makes type consistent with the rest of the code. Also `CacheDataHeader::setData()` made consistent with `getData()`. Bug: b/246683126 Change-Id: Ib1f8b680622c3d4f912d8a21ed8b740c3d17483e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5854707 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev b98e6bc0 2024-09-12T00:00:00 Translator: Add EXT_texture_shadow_lod functions Added translator support for functions defined in the GL_EXT_texture_shadow_lod extension. Trivially enabled on GL and Vulkan backends. Bug: angleproject:365066518 Bug: angleproject:365108862 Change-Id: Ie1fc8f50e321a559d4506c479d9cebbb48802091 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5867416 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 6e0ae899 2024-09-17T12:12:03 Vulkan: Suppress more rasterizer-discard VUs due to VVL bugs Bug: angleproject:42266678 Change-Id: I7321c28362d1a2be529b9d173c8429c757c26fd8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5869444 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao dbdc9551 2024-09-16T10:19:47 Vulkan: Let asyncCommandBufferReset control garbage cleanup So that people can toggle the flag to compare perf/power difference with async thread doing garbage clean up AND command buffer reset. This also renames feature flag asyncCommandBufferReset to asyncCommandBufferResetAndGarbageCleanup to reflect the implementation. Bug: b/255411748 Change-Id: Id459e6f4dc81ec76b6c0c2dba0db46041ea6ae8a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5867389 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Austin Annestrand 72d01332 2024-05-23T16:34:14 CL/Vulkan: Add missing EnqueuedLocalSize PushConst Additionally, we move down "processKernelResources" after "getOrCreateComputePipeline" since new push constant needs LWS value and we might modify ndrange's LWS after "getOrCreateComputePipeline". Bug: angleproject:366412385 Change-Id: Ia287d667e0616256d1f9c039566b79aae1337154 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5860306 Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Charlie Lao 9685cb96 2024-09-17T11:41:28 Vulkan: Clean up PackedClearValuesArray::store The code was a bit confusing, raising question why there is check of aspectFlags != VK_IMAGE_ASPECT_STENCIL_BIT. I believe this was originally from https://chromium-review.googlesource.com/c/angle/angle/+/2142711, and then followed by https://chromium-review.googlesource.com/c/angle/angle/+/2410366. The code seems to having some special logic to handle packed depth stencil clear value. This code may have been changed a bit. When I am looking at current code base, I am not seeing good reason doing it this way. Caller is handling the packed format by reading out depth value and pack them together and then store. This CL replaces store/storeNoDepthStencil pair to storeColor/storeDepthStencil. Bug: b/167301719 Change-Id: I40cfca1e51654f5ddaf4b2e8460ae5a26c656f2b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5870921 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Austin Annestrand 89f9ea08 2024-06-18T10:23:22 CL/Vulkan: Fix missing init() for clLinkProgram Fixing missed init() call/routine when creating the CLProgramVk object during clLinkProgram. Bug: angleproject:366411889 Change-Id: I13402b823746a59b3f0539830a6cde64b6201ae9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5860305 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Gowtham Tammana f2d9d755 2024-09-10T10:28:37 CL: Drop image_descriptor and format from image create The image descriptor and format are part of the state and as such remove them passing down through the create() Bug: angleproject:365694588 Change-Id: I6e5c4595c0093f15df65f43ed607643cb7c2ae14 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5854004 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Gowtham Tammana ad4159f3 2024-06-20T12:26:32 Vulkan: Add utils for cl state to vk state Add utils for translation of vk state from/to cl state in vk_cl_utils. Bug: angleproject:365694588 Change-Id: I74f33416a2746048c0b74793b06bee612cf51eb3 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5854002 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi f8031fbe 2024-09-17T11:35:58 Vulkan: Unsuppress fixed VU errors Bug: chromium:359904720 Bug: angleproject:362545033 Change-Id: I2721344843ffbddd6c56261359360473ad896a39 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5870469 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Mohan Maiya f2eb8781 2024-09-14T16:16:53 Vulkan: Selectively enable emulateR32fImageAtomicExchange Only emulate R32F imageAtomicExchange if shaderImageFloat32Atomics feature is not supported Bug: angleproject:42264071 Change-Id: I305ab88bf3ac918eff5d8c399f0ed02ec8c60c2d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5860814 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov 1503a107 2024-09-17T10:46:29 Revert "Vulkan: Prefer monolithic pipelines everywhere" This reverts commit e9ab557c744c29088174b6c7bc93692fe7f32dbd. Reason for revert: kills Windows Intel UHD 770 machines http://anglebug.com/42265839#comment34 Original change's description: > Vulkan: Prefer monolithic pipelines everywhere > > Apparently, every vendor prefers this, and > graphicsPipelineLibraryFastLinking has no bearing on the driver's > preference. > > Bug: angleproject:42265839 > Change-Id: Ied8d82e0a9e08fe5efe3f625e2612764f67f9768 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5861024 > Commit-Queue: Yuxin Hu <yuxinhu@google.com> > Reviewed-by: Yuxin Hu <yuxinhu@google.com> > Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:42265839 Change-Id: I95fa61b2242684b63adc2841b777bde923e34d41 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5868055 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Mohan Maiya 1b4d6185 2024-09-12T09:18:46 Vulkan: Cleanup sRGB related code Image and image view code is littered with sRGB related enums, even in places that don't deal with sRGB. Remove sRGB related parameters from initLayerImageView and getLevelLayerDrawImageView methods, which now assume default values. Add dedicated methods that allow overriding sRGB state values. Also introduce ColorspaceState struct that consolidates all sRGB related states, this will be used in follow up changes to track and infer colorspace of image views Bug: angleproject:40644776 Change-Id: Ifb366db48043e376f9ff6c30c852c44dd96562a1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5860808 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi e9ab557c 2024-09-14T22:11:18 Vulkan: Prefer monolithic pipelines everywhere Apparently, every vendor prefers this, and graphicsPipelineLibraryFastLinking has no bearing on the driver's preference. Bug: angleproject:42265839 Change-Id: Ied8d82e0a9e08fe5efe3f625e2612764f67f9768 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5861024 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Gowtham Tammana 937c5dc8 2024-09-09T12:18:55 Vulkan: Make image{Read,Write} helper interface api agnostic Removing ContextVk dependency on the imageRead/imageWrite helper utility functions. Bug: angleproject:42266971 Change-Id: I493e1fb11e8ae192f766c822cbee278c49c23bfe Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5845197 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu 6ee07959 2024-09-13T17:12:26 Remove the suppressed VVL error https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/8523 is fixed. Remove the VVL error from the suppressed list. Bug: b/365580001 Change-Id: Ib7a3819e740393306995df1eabec14e1b9878d7a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5860811 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Hailin Zhang 8c12874c 2024-09-12T11:26:29 vulkan: add double buffer swapchain for fifo mode. Double buffer swapchain usually drop the performance. But at B* the default fps cap for silver device still at 30fps. This change is for reduce latency. Bug: b/311022968 Change-Id: Ida4044f439bbe3f235d53f5d1d2f945533cbb094 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5858255 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov 7dcfc32b 2024-09-12T16:25:28 Remove renamed VUID VUID-VkVertexInputBindingDivisorDescriptionEXT-divisor-01870 was renamed to VUID-VkVertexInputBindingDivisorDescriptionKHR-divisor-01870 in https://github.com/KhronosGroup/Vulkan-ValidationLayers/commit/6adb436617e6c66fbc8b2a24996659f5c5bbb63f Bug: angleproject:42266877, angleproject:42266639 Change-Id: I382625d33ef6728835d8e9db307d32b7910ac9b7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5855187 Commit-Queue: Solti Ho <solti@google.com> Reviewed-by: Solti Ho <solti@google.com> Auto-Submit: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Charlie Lao c9d55051 2024-09-06T10:56:07 Vulkan: Consolidate dirtyRanges before vertex conversion Detect two ranges overlap or are continuous and merge them. This reduces number of dispatch calls as well as avoids redundant conversion. Bug: b/357622380 Change-Id: I06b73a1e9fd573d79af985b247f4d66bf97f756e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5851642 Auto-Submit: Charlie Lao <cclao@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
angle-autoroll 958b657f 2024-09-10T20:34:57 Manual roll vulkan-deps from 725499142cb6 to 3b92cef97feb (32 revisions) Manual roll requested by yuxinhu@google.com Manual roll changes: suppress VUID-vkCmdDrawIndexed-Input-08734 until VVL issue angleproject:365580001 is addressed. https://chromium.googlesource.com/vulkan-deps.git/+log/725499142cb6..3b92cef97feb Also rolling transitive DEPS: https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang/+log/a496a34b439022750d41d2ba04fbbe416ef81c9a..12a17b7ce41436427e358608183100b1103274da https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers/+log/efb6b4099ddb8fa60f62956dee592c4b94ec6a49..2a9b6f951c7d6b04b6c21fe1bf3f475b68b84801 https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools/+log/e1782d6675b88225225e331a6318554d473c54db..d160e170d74ff45cb2a88dfb365bdfd896016f7c https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader/+log/c758bac8bf1580b5018adafd3a2ec709237b0134..1108bba6c97174d172d45470a7470a3d6a564647 https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Utility-Libraries/+log/fbb4db92c6b2ac09003b2b8e5ceb978f4f2dda71..ea5774a13e3017b6d5d79af6fba9f0d72ca5c61a https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/af7b0a35d009b5ad6e0b280a5b81388608ebfe39..99de3c17fbc2db6b6da0347916c9e01a383c2758 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: angleproject:365580001 Tbr: yuxinhu@google.com Change-Id: Iac9c8b6310d3ebb955dd09fd26b71d373e13b479 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5849280 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 10d56e63 2024-09-06T10:56:07 Vulkan: use mEntireBufferDirty if range covers entire buffer Detect the dirtyRange covers entire buffer and set mEntireBufferDirty instead of add range into mDirtyRanges. This will get into a much simpler code path that will not have any redundant conversion. This also removes quite big portion of overlapped ranges cases without much of overhead. Bug: b/357622380 Change-Id: Iedaa3662a6fc52257e71d39ab75baddf6ad3e41b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5840476 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 6afcbd3e 2024-09-10T10:31:42 Vulkan: Disable dynamic rendering on ARM Due to driver bugs. Bug: b/356051947 Change-Id: Ic345496010b051ad054811a8c34bb3f816bbf258 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5851632 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 941b3df3 2024-08-21T17:23:16 Vulkan: Add new threshold for CPU buffer subdata Currently, with preferCPUForBufferSubData enabled, when the GPU is busy, we use the CPU to copy subdata, which includes duplicating the buffer. If the buffer is large, this can cause performance regression. To avoid this, we should avoid using the CPU in cases that can lead to such regressions. * Enabled preferCPUForBufferSubData for all ARM devices. * This feature is only used in the following cases: * If the buffer is smaller than than 32K; or * If the copy size is greater than 1/8 of the total buffer size. * Significant performance improvement observed in several traces. Bug: b/360118138 Change-Id: Ibc8e3de9b4e081c69457c85facba893283c8fb38 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5824347 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 53476d6f 2024-09-04T14:34:11 Vulkan: Do vertex conversion with fine grain dirtyRange Right now when we do vertex conversion with multiple dirty ranges, we are merging dirty ranges into single range and then UtilsVk::convertVertexBuffer() is called for the merged dirty range. If there is big gap between two ranges, the merged range could be very big. This means we end up doing many unnecessary conversion. This CL tracks individual dirty ranges and issues dispatchCompute for each dirty range, thus minimize the unnecessary conversions. On S24, this change further reduces TraceTest.gangstar_vegas frame time from ~6.0ms to ~3.8ms, almost parity to native GLES's ~3.6ms. Bug: b/357622380 Change-Id: Ia103f3963bdb5996ff3f95164c955a3e4f33f311 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5787633 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Austin Annestrand fc65058c 2024-05-03T14:47:29 CL/Vulkan: Rework spec constant handling Specialization constants can be combined into a single hash map that's later iterated on when we create the compute pipeline. Bug: angleproject:364396920 Change-Id: I161356808ff0bd6a589f01854264210011bec512 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5834664 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mike Schuchardt 45ea2094 2024-09-06T10:36:07 Don't build api_dump for secondary abi on Android 32-bit builds of VK_LAYER_LUNARG_api_dump are extremely slow so skip them when building for arm64. Bug: b/42267058 Change-Id: I8c2d959d86a58537dafa518fb58267b38cda21f4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5842279 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Mark Łobodziński <mark@lunarg.com>