src/libANGLE/renderer


Log

Author Commit Date CI Message
Nicolas Capens cbab97d4 2022-07-29T11:03:21 Remove needless IOSurface alignment validation IOSurface buffers are copied instead of imported directly into Vulkan, since they're not guaranteed to satisfy alignment and padding requirements (see minImportedHostPointerAlignment and vkGetMemoryHostPointerPropertiesEXT). So we don't need to check its alignment as part of eglCreatePbufferFromClientBuffer() validation. Bug: angleproject:7538 Change-Id: Ic449e7cdd60e62cd3009854897ffcd369e32fc7c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3792178 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Auto-Submit: Nicolas Capens <nicolascapens@google.com>
Shahbaz Youssefi f000215d 2022-07-26T21:16:14 Vulkan: Optimize transform feedback buffer tracking Prior to this CL, if transform feedback was active at the time of render pass closure, its buffers were cached in ContextVk. Later, these buffers were used to close the render pass if they were used for any other reason (such as vertex attribute). However, this meant that the render pass could close unnecessarily if transform feedback was ended right after the render pass is closed. The closure of the render pass was an awkward place to cache the used transform feedback buffers (because at that point, the buffers are actually no longer used). Instead, this change makes sure that the buffers are cached when transform feedback buffers are first used by the render pass, and the cache is cleared at the end of the render pass. Bug: angleproject:4622 Change-Id: I31c0a1e20d48f2e261e2cf37adb0a46db683e6fb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3788309 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 5db09e9b 2022-07-21T10:45:12 Vulkan: Try allocate from existing DescriptorPool before create new When we allocate a new descriptorSet, right now we only look at current bound pool or the last pool, or allocate a new pool. We never look at the other pools for the possibility of allocation. This is likely due to we never free descriptorSet in the past. With the recent CLs, we now release invalid descriptorSets when texture or buffer gets deleted or re-specified. This opens up opportunity to allocate from other existing pools before allocating a new pool. This CL changes the allocation logic to add the pass to iterate over existing pools for allocation before allocating a new pool, thus reducing the number of descriptorSetPools. This CL also consolidates DynamicDescriptorPool::getOrAllocateDescriptorSet()'s actual descriptorSet allocation logic with DynamicDescriptorPool::allocateDescriptorSet(). This CL also moves mEmptyDescriptorSets from ProgramExecutableVk to DynamicDescriptorPool so that we will only have one empty descriporSet per pool instead of per program. Bug: b/235523746 Change-Id: I012346acce17f785ee6683ec55fdf21be00ea1a0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3780847 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Auto-Submit: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan e7affd55 2022-06-23T13:49:18 d3d11: allow selecting render device by PCI vendor/device ID Similar my change in the Vulkan backend, we can match by PCI vendor/device ID in D3D11 device selection. Bug: angleproject:7460 Change-Id: I6f7bff1dad5b589357693bf747157b2dacb1f69f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3720734 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Auto-Submit: Steven Noonan <steven@valvesoftware.com> Reviewed-by: Steven Noonan <steven@valvesoftware.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 80022b96 2022-07-26T21:07:04 Vulkan: Fix xfb buffer redefine to smaller size In 89e11878b275b15735eaf273ababfa6fd43a2e3d, a use-after-free bug was fixed where glBufferData redefined a buffer, leading to a change in storage. This was only tested for the case where the new buffer was larger than the old buffer. When the new buffer is smaller however, another issue remains where the buffer size as cached by the transform feedback object used the old object's size. This is worked around in this change, with a fix for the real issue (that the buffer state is updated after calling into the backend instead of before) coming up. Bug: chromium:1345042 Change-Id: I6c9e9344705fefe49926a14cf6ce73ce84305872 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3788308 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Steven Noonan b8e741d2 2022-06-23T13:36:17 Vulkan: allow selecting render device by PCI device/vendor IDs The EGL_ANGLE_platform_angle_device_id extension is deliberately vague about the meaning of "device ID high" and "device ID low", stating it's platform-specific. We can use these for representing the PCI device/vendor IDs that can be discovered via various (OS-specific) external means. Bug: angleproject:7460 Change-Id: Iff462687749e815fa074ef8ff392b6730ef46fa8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3720733 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Stephen White 3f59c285 2022-07-12T17:29:36 D3D11: implement image load/store format reinterpretation. Reinterpretation requires all UAV textures to be in a TYPELESS format. Implement an ensureUnorderedAccess() that converts the texture's storage to one with the D3D11_BIND_UNORDERED_ACCESS flag, which, prior to this change, was set unconditionally for all textures in an >= ES 3.1 context. If this flag is set at D3D texture creation time, use the appropriate TYPELESS format. Implementation uses a BindFlags struct, which subsumes the existing renderTarget for clarity. Factor out the relevant bits of ensureRenderTarget() into an ensureBindFlags() helper function, and make ensureRenderTarget() and ensureUnorderedAccess() wrappers around it. Add the corresponding typeless formats to the texture format table. Bug: angleproject:7501, angleproject:7520 Change-Id: Id21b9db3229aceca121da6ba6507704417034ec4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3780588 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Stephen White <senorblanco@chromium.org>
Sungyong Choi 313884ce 2022-06-30T08:49:08 Vulkan: Move dmabuf extensions support Moves dmabuf support functions from DisplayVkWayland to DisplayVkLinux to support other linux winsys. Bug: angleproject:7480 Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Change-Id: I2a36557815b8e5c4bab7ec1d9248989345e536c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3735863 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Antonio Caggiano <antonio.caggiano@collabora.com> Reviewed-by: Jeff Vigil <j.vigil@samsung.com>
Shahbaz Youssefi be708446 2022-07-25T15:24:52 Vulkan: Remove the bindEmptyForUnusedDescriptorSets workaround Only applied to older Qualcomm-based phones. Bug: angleproject:2727 Change-Id: I37a611e2ff79d898eff9401467407543f3c690b8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3785290 Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Peter Kasting 4a14030d 2022-07-22T10:09:53 Avoid streaming a wide string to a (narrow) ostringstream. This stream overload was removed in C++20. Bug: chromium:1284275 Change-Id: I73188e09cc93c7bd475ab1536dac74e92ea12605 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3781611 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Peter Kasting <pkasting@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Peter Kasting <pkasting@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Cody Northrop e3933465 2022-07-21T11:35:17 Vulkan: Allow dither for some color blend modes Some color blend modes are known to work with our dither emulation. Test: Candy Crush on Pixel 6 Bug: b/232574868 Change-Id: I1b57e243afcf4643e2cd12f862408050751fa987 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3780846 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 00e48c13 2022-07-20T17:35:01 Vulkan: Destroy DescriptorPoolHelper when its unused. DynamicDescriptorPool keeps an array of DescriptorPoolHelpers. Right now we only grow this array of pools, we never shrink the pool count. This is partly due to we never release descriptorSet. But in the past few CLs, we now release invalid descriptorSet when texture/buffer gets deleted or re-specified. This means we could now have a pool with no valid descriptorSets. This CL adds the ability to actually release the pool when all of its descriptorSets has been released, thus reduce the pool count when a lot of textures have been deleted. Bug: b/235523746 Change-Id: I2d5047269154cc8ece8305408f08f2ad7c9dd8a6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3780845 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Yuxin Hu b23ea680 2022-07-22T12:06:42 Vulkan: Re-enable multisample framebuffer fetch Bug: angleproject:7351 Bug: angleproject:3586 Bug: angleproject:6195 Bug: angleproject:7512 Bug: b/234173199 Change-Id: Ib70732f8c075de777e534f950a7e421e75969f59 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3781613 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Lingfeng Yang c2aaeadb 2022-07-14T13:27:38 Vulkan: Skip nonexistent attachments when calculating samples When FBO 0 is bound, FramebufferVk can get into a state where the color attachment is considered null (such as surfaceless). Then, getSamples() is called with null color attachment, resulting in an assertion or nullptr crash. Fix getSamples() to respect the color attachments mask. The entry point that brought this about was also a dispatch, not a draw. In a future CL, we should also optimize syncState to not consider draw related state if the task is a dispatch. Also fixes b/234620157 Bug: b/223456677 Change-Id: I8cc969de941f43a2eb66871033d6ec7ddf8b8a66 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3764435 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Lingfeng Yang <lfy@google.com>
Yuxin Hu d0fe12db 2022-07-20T10:16:38 Vulkan: Disable Multisample Framebuffer Fetch Disable the multisample framebuffer fetch temporarily to unblock the angle to chromium roller. Will re-enable after https://ci.chromium.org/ui/p/chromium/builders/try/win10_chromium_x64_rel_ng/1240846/overview is resolved. Bug: angleproject:7351 Bug: angleproject:3586 Bug: angleproject:6195 Bug: angleproject:7512 Bug: b/234173199 Change-Id: I435b257dd07d973d06d5cacd779e943eed32097b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3777059 Reviewed-by: Roman Lavrov <romanl@google.com>
Roman Lavrov 992018c7 2022-07-20T17:31:47 Suppress VUID-VkGraphicsPipelineCreateInfo-pStages-06896. Bug: angleproject:7513 Change-Id: I2877c069e33d2ec5e92cf759dc3ab1d270e1a414 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3776759 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Roman Lavrov <romanl@google.com>
Lingfeng Yang fc97b2da 2022-07-14T13:18:56 Vulkan: Always use depth<=256 AHB image siblings Android will sometimes use an uninitialized value for the layerCount, which results in huge, many-GB allocations down the line. If we see a big value there, force to 1. Bug: b/223456677 Change-Id: I201e9901d9c726a9af73d025ac33850d11a5a38a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3764433 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Lingfeng Yang <lfy@google.com> Commit-Queue: Lingfeng Yang <lfy@google.com>
Lingfeng Yang be24acbd 2022-07-14T13:16:33 Vulkan: Support GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES This CL adds basic support for GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES to the Vulkan backend, and also allows the enum through validation. Bug: b/223456677 Change-Id: If0dcb467bb72bdfc9ced4862231a676eef471a6c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3764432 Commit-Queue: Lingfeng Yang <lfy@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Lingfeng Yang bd82a5e4 2022-07-07T17:03:27 Vulkan: __samplerExternal2DY2YEXT-aware ProgramExecutableVk This CL incorporates __samplerExternal2DY2YEXT into the Vulkan objects involved in ProgramExecutableVk. Specifically, we need: 1. TextureVk to create and return a VkSampler imbued with identity conversion model, so we can create an immutable sampler from it. 2. Access to the identity conversion desc so that it can be traced in mImmutableSamplerIndexMap. Bug: b/223456677 Change-Id: Ia302226a8aa4a97d4a42f79c79ce47af3abec37c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3753294 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Lingfeng Yang <lfy@google.com>
Lingfeng Yang 6c418f8c 2022-07-07T14:28:06 Vulkan: __samplerExternal2DY2YEXT-aware TextureVk This CL adds the ability for TextureVk to return an ImageView that is created with a VkSamplerYcbcrConversion object that uses an identity conversion model. This allows direct sampling of YUV values without RGB conversion, which is needed for __samplerExternal2DY2YEXT. Bug: b/223456677 Change-Id: Ie1d4e12375b7808a1f060747bc2d74baeda3fdea Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3751889 Commit-Queue: Lingfeng Yang <lfy@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 53d40aed 2022-07-15T15:03:25 Vulkan: Destroy descriptorSet cache when BufferHelper destroyed For atomic counter buffers or other cases, dynamic descriptor is not been used. Right now when such buffer is destroyed, the cache is still lingers around. With this CL, when a new cache entry has been created, we record the cache entry in the BufferHelper. When BufferHelper is destroyed, we also immediately destroy the cache entry since the cache will no longer reused. Bug: b/237686097 Change-Id: I26eee96318fbc003e65318c0b8263dc61092f350 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3764044 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao c7459a46 2022-07-15T09:55:03 Vulkan: Destroy descriptorSet cache when BufferBlock destroyed When a new cache entry has been created, we record the cache entry in the BufferBlock. When BufferBlock is destroyed, we also immediately destroy the cache entry since the cache will no longer reused. This CL also removes DescriptorCacheResult from various APIs since it is now redundant with newSharedCacheKey argument. Bug: b/237686097 Change-Id: I14fa8906fdbe7d9226c8e8ecddef2beb05fbaa5c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3756694 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Auto-Submit: Charlie Lao <cclao@google.com>
Charlie Lao 8df0c53e 2022-07-11T16:56:26 Vulkan: Split suballocation out into it's own file Right now Suballocation and BufferBlock classes are in vk_utils.h, which is included by other header files. This made it difficult to have these two classes use variables defined in other headers. And vk_utils.h is really designed for utilities, it isn't the best place for bufferBlock/suballocation by definition. This CL split out suballocation code into its own file to make future CLs much easier. No functional change is expected other than move the code around. Bug: b/237686097 Change-Id: I36733468b4bed152a19d9c9bca8e7459c11c3b43 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3756761 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Lubosz Sarnecki 45e5cf01 2022-06-03T14:29:23 Vulkan: Implement ASTC emulation. Implement ASTC emulation using the astc-encoder library. Add copy_image tests to deqp_gles31_test_expectations for desktop cards. Add emulatedAstc limitation. Don't expose emulated ASTC from WebGL contexts. Introduce ANGLE_HAS_ASTCENC define to check for build availability. Only build on angle_standalone configurations. DEPS: Add astc-encoder. image_util: Decode ASTC to RGBA. TracePerfTest: Skip car_chase and genshin_impact on NVIDIA. Bug: angleproject:7415 Change-Id: Ib2f3fd3f710164a2ecd5d5edf780227031bbfb84 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3697999 Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 645ee194 2022-07-18T21:48:59 Vulkan: Only modify input attachment images for FF MSAA fix up Previously all OpTypeImages were changed to MSAA, but only the ones with the SubpassData dimension should have been. Bug: angleproject:6195 Change-Id: I1caadd23420f0d9cffdee4e3b9d63cf6fa93982e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3770645 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi d4e54b81 2022-07-17T22:56:51 Vulkan: Clean up garbage of last completed submission too Due to an off-by-one error, the garbage of the very last completed submission was not actually cleaned up. Bug: b/172704839 Change-Id: I4fb6a77af4379568990853e4bf3fd945fcde657c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3769547 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov bf369285 2022-07-18T15:12:13 Suppress SYNC-HAZARD-WRITE_AFTER_READ in vulkan_car_chase Bug: angleproject:7125 Change-Id: Ibebe363bcc98413f259db9cb959b0ef816ed5ee2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3768935 Commit-Queue: Cody Northrop <cnorthrop@google.com> Auto-Submit: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Kyle Piddington c4004751 2022-06-23T14:35:21 Metal: texture allocation failures handled incorrectly When allocating large textures, allocation may fail if textures exceed the Metal memory limit. When a nil texture is returned, we should check texture allocation before assigning it as a backing object ANGLE port of the following bug https://bugs.webkit.org/show_bug.cgi?id=240790 Bug: angleproject:7459 Change-Id: Ib94f42d25df28a31513ab78fc42c6523bfbc5f76 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3722601 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org>
Shahbaz Youssefi 1ae7a56c 2022-07-14T13:11:16 Vulkan: Fix double clear of AHBs Originally when deferred clears were implemented, it was assumed that it's impossible at glClear time to have a render pass open without any commends. This assumption was broken under two circumstances: - Clear of 3D attachments that don't include all layers - Clear of AHBs In these cases, the clear immediately opened a render pass with nothing but loadOp=CLEAR. If another clear followed, an assertion would fire. In this change, open render passes without commands are handled such that clears are accumulated in the loadOps. Bug: b/223456677 Change-Id: If99bcf9e24454b0c9e140cb93df7e7f76f175363 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3763169 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Lingfeng Yang <lfy@google.com> Reviewed-by: Lingfeng Yang <lfy@google.com>
Peng Huang 8f2fbbeb 2022-07-14T11:30:12 Inline all metal command buffer decoder methods It should improve command buffer decoding slightly. Bug: angleproject:7296 Change-Id: I2481d0760c937a26c7c998131b398dd83bd0eaf9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3763063 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org> Auto-Submit: Peng Huang <penghuang@chromium.org>
Amirali Abdolrashidi d9763c60 2022-07-14T14:42:27 Disable mutable texture upload on Win/Intel devs After adding the mutable texture upload CL, we are experiencing some instances of flakiness in the form of lost context/device errors in the perf tests in Win/Intel cases. * Added mutableMipmapTextureUpload as an ANGLE feature, which is used to determine if onMutableTextureUpload() should be called. * It is disabled on Windows when using an Intel GPU. * Disabled the related unit tests on Win/Intel cases. Bug: angleproject:7308 Bug: b/202744914 Change-Id: Ib8c1bddc39cc4354468831a4a599a7c343d05f0e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3764460 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Charlie Lao 01092c48 2022-07-12T10:11:22 Vulkan: Destroy descriptorSet cache when shader image is destroyed Similar to texture descriptor set, this applies to images used as shader resource. When a texture is used in a shader resource descriptorSet, we record it. When texture is destroyed, we also destroy that shader resource descriptorSet cache. Bug: b/237686097 Change-Id: I475982fcec45535cc285a4aebca922d01efc7ed2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3758884 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao e25137c0 2022-06-29T09:57:50 Vulkan: Move DescriptorSet cache to DynamicDescriptorPool DynamicDescriptorPool has an array of DescriptorPoolHelper. Right now mDescriptorSetCache is stored in DescriptorPoolHelper. This means when you search cache for the match, you have to iterate over the array of DescriptorPoolHelper to decide to make conclusion if there is a match or not. Each hash map search means compute hash and do key comparison. I think this was done this way because of we used to not able to evict cache when we decide to reuse DescriptorSetPoolHelper object (when we call pool->init). But with recent changes of SharedDescriptorSetCacheKey, we are able to evict specific cache entries. This CL moves mDescriptorSetCache to DynamicDescriptorPool so that cache look up can be cheaper. This also made CacheStats simpler as well. With Gfxbench gl_driver2_off and cpu clock locked, this CL improves score by 2.16% (from 4019 before CL to 4105 after CL). See bug for detailed data. Bug: b/237686097 Change-Id: Ia6fa7a6b725974e0150bc21cdf0140d9198c8332 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3735736 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 6cbf0c01 2022-07-14T11:35:46 Vulkan: Only apply MSAA FF fix up if executable has FF Due to the permanentlySwitchToFramebufferFetchMode feature, framebuffer fetch is permanently enabled on first use. Checking GraphicsPipelineDesc as previously done would thus always return true, even if the executable does not use framebuffer fetch. As a side effect, every multisampled draw turned into a per-sample shading draw. Bug: angleproject:6195 Change-Id: I748abddd2003297d6ff37a98e69cce4621697ad7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3763064 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Amirali Abdolrashidi 32c5fd8a 2022-05-13T14:31:03 Reland "Vulkan: Flush texture updates more often" This is a reland of 8bb7c35c2159de2fa9e9a008679c692edd4402a6 * Added a condition to make sure the previous texture is not immutable when performing the optimization. * Fixed the issue where mipmap textures with unequal dimensions were not flushed. * Added related tests. * Added kEnableMutableMipmapTextureUpload, a flag to enable/disable the feature (enabled by default). Original change's description: > Vulkan: Flush texture updates more often > > * Added a pointer to the previous texture in ShareGroupVk so we can > flush the texture updates once we switch to a new texture. > > * We check if mip levels 0 and 1 are conformant in terms of > size, format and number of samples. > > * As a part of size check, we also check depths if the texture > target is either 3D, 2D array, or cube map array. For the former > two, they have to conform to mip scaling similar to width and > height. For the latter, the depth represents layer-faces and does > not change for mipmaps. > > * Added a test to ensure the pointer to the previous texture is > deleted when the corresponding texture is deleted, so the old value > is not accessed by a future mutable texture. > > * Added tests to make sure the mutable texture is uploaded with > the appropriate mip level attributes, and not uploaded in cases of > size/format inconsistencies, incompleteness, and no base level. > > Bug: b/202744914 > Change-Id: I9c2c1af87a8a49e75d3ad25523436b0cd51a7e81 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3606329 > Reviewed-by: Charlie Lao <cclao@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Bug: b/202744914 Change-Id: I2bdbcd0182a57c18c1a18968396251a2e366731b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3646959 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Yuxin Hu 0d3ecf46 2022-06-24T16:37:17 Vulkan: Multisample Framebuffer Fetch Implement Multisample Framebuffer Fetch. This should fix the deqp failure dEQP.GLES31/functional_blend_equation_advanced_msaa_colorburn Bug: angleproject:7351 Bug: angleproject:3586 Bug: angleproject:6195 Bug: b/234173199 Change-Id: Idd7559dcba3d91e36d8f253f1554fb931a7a6775 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3724165 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Alexey Knyazev 5897d6f5 2022-07-07T00:00:00 GL: Add emulateCopyTexImage2D workaround Using texImage2D + copyTexSubImage2D seems to be more stable than using copyTexImage2D directly. Added missing HALF_FLOAT fix to the code path that requires target texture initialization. Fixed target texture dimensions when initialization is not required. Fixes Apple GPU crashes in: * CopyTexImageTest.DeleteAfterCopyingToTextures * conformance/textures/misc/texture-copying-and-deletion.html * conformance/textures/misc/texture-copying-feedback-loops.html Bug: angleproject:5038 Bug: angleproject:5360 Bug: chromium:1130703 Change-Id: I5cce087983601e768902f01b3462ec2106e2500a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3749921 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Constantine Shablya b47603e0 2022-06-14T05:47:54 Implement GL_NV_read_depth_stencil The implementation will perform two readPixels calls, once for each aspect, and then interleave and pack the result. Bug: angleproject:4688 Change-Id: I46390df893de50b93e855e9333ffab567215a2bb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3702686 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com> Auto-Submit: Constantine Shablya <constantine.shablya@collabora.com>
Ian Elliott d88f7906 2022-07-01T12:57:09 Extra buffer logging/checking on Android Cuttlefish This adds a feature that will be enabled on Android Cuttlefish systems, to catch a rare crash. Test: Visual inspection of logcat output Bug: b/236098131 Change-Id: Ie35d7e017f69b36da9caf3e47c31fcc71846caed Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3726963 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Cody Northrop 3622f147 2022-07-11T20:36:46 D3D: Fix compile after CreateTemporaryFile changes Test: Compiled with "angle_enable_trace = true" Bug: angleproject:5095 Change-Id: I0afce1ced5d83aabe1a5183434029e03bee22eff Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3756358 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Eddie Hatfield <eddiehatfield@google.com>
Alexey Knyazev 056c6c7c 2022-07-11T00:00:00 Metal: Skip invalidation of emulated formats Fixes SimpleStateChangeTestES3.InvalidateRGBThenDraw on Apple GPU. Bug: angleproject:7397 Change-Id: Ice5677004b38c3d67a9fc938d15dd64a20723380 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3755782 Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 94bbb40a 2022-07-04T00:00:00 GL: Enable pack skip emulation on all Apple drivers * conformance2/reading/read-pixels-pack-parameters.html is failing in WebKit on M1 without this workaround Bug: angleproject:4849 Change-Id: I710386d29c120e59338cd56fc9843cd6232ff96c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3743445 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Charlie Lao a1f8049a 2022-07-06T13:12:20 Vulkan: Remove VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT Some virtual machine drivers have performance cost with VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT. This CL keeps the individually freed descriptorSet in the pool and try to reuse rather than free it. This CL also removes descriptorSetCount from some API since it always allocate one at a time. Bug: b/237848471 Change-Id: I029d651101fa1050770eba9e733a166e56a69684 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3749797 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 9931dfd5 2022-05-02T00:00:00 D3D9: Implement float sources for Image9::copyFromRTInternal Bug: angleproject:5038 Bug: angleproject:6257 Change-Id: I4f21fb1e37a985e2179d9c06101fa5bd2fedb100 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3738143 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Mark Lobodzinski fb3e2def 2022-05-24T15:47:01 Extend labelObject functionality Modify interface to fully support labelObject return codes. Fix issues with texture implementation, including handling deferred Vulkan object creation. Bug: b/229105865 Change-Id: I0c64b72dd0b54642fb643ee7f5ccbb2a134c6787 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3703184 Commit-Queue: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Alexey Knyazev a4e00c64 2022-06-30T00:00:00 Expose EXT_compressed_ETC1_RGB8_sub_texture on Metal and GL Updated the test to ensure that this extension is exposed on Apple GPUs when using Metal. Updated emulatedEtc1 limitation to hide this extension when the main ETC1 extension is hidden. Real WebGL apps cannot enable this extension because it is not exposed in WebIDL. Removed bogus entry from IsETC1Format and use the helper consistently in all validation functions. Simplified GetNativeCompressedFormat. Bug: angleproject:7471 Change-Id: I61321fadad7d962358d0fefecd08aaddaedd2ec2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3737762 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Quyen Le 0f688d62 2022-07-04T15:49:53 Metal: Allow Surfaces to be created without depth & stencil Previously, egl::Config with depthSize=0 & stencilSize=0 wasn't added to DisplayMtl's configSets. Thus every surface would be created with at least stencilSize=8 although users requested DONT_CARE. This led to wasteful memory being used to created stencil buffers even though they were not used. Fixes: - dEQP-EGL.*.query_surface.simple.pbuffer.rgba8888_depth_stencil - dEQP-EGL.*.query_surface.simple.pbuffer.rgba8888_depth_no_stencil - dEQP-EGL.*.query_surface.simple.pbuffer.rgba8888_no_depth_stencil Bug: chromium:1329376 Change-Id: Iba13b527640a6b8ce6c4b3a63346b41730a83891 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3739868 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Quyen Le <le.hoang.q@gmail.com> Reviewed-by: Gregg Tavares <gman@chromium.org>
Shahbaz Youssefi 053d152d 2022-07-04T21:20:34 Vulkan: Resolve GoogleX MSRTSS conflict with EXT Now that the extension is public, rename the old symbols to GoogleX as they have shipped previously. This reverts defd99dc4. Bug: chromium:1088005 Change-Id: I5ac7f73e24084e26a8b2d9cf742c7ab9b3c80984 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3744362 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Mohan Maiya 81a69da6 2022-06-30T09:56:54 Vulkan: min/mag filters follow chroma filter value The Vulkan spec states that for those formats lacking support for VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT the min and mag filter must be equal to the sampler YCbCr conversion's chroma filter. Having the min/mag filters follow the chroma filter leads to simpler and more efficient code. Also update getPreferredFilterForYUV function to return existing filter value when preferLinearFilterForYUV feature is disabled. Bug: angleproject:7382 Bug: angleproject:7392 Tests: Texture2DTestES3YUV.TexStorage2DYuvFilterModes* Tests: ImageTestES3.SourceYUVAHBTargetExternalYUVSampleLinearFiltering/ES3_Vulkan Change-Id: I550ef8feede1dc6c3a0d8e32f790113e90ef7a4b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3739582 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Eddie Hatfield 916a35dd 2022-06-28T14:40:53 Merge getTempPath and CreateTemporaryFile Also includes moving these two (and some helpers) to common/system_utils.h Bug: angleproject:5095 Change-Id: I7d2fcbd27a67dc13215265ac5b5e8391b15a980b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3733519 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Eddie Hatfield <eddiehatfield@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Rafael Cintron 39e88e6e 2022-06-29T13:48:14 Handle OOM in SwapChain11::getRenderTargetShaderResource SwapChain11::getRenderTargetShaderResource has a code path where it allocates a new texture if the current one has insufficient flags. When this happens, the return value of the texture allocation is not checked, leading to a nullptr crash. Since texture allocation can fail in the case of OOM, we need to handle the failure and propogate the error to callers. Bug: angleproject:7442 Change-Id: I686d84ace669c461e8f7ef66bb0e6c4466f1c5ff Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3736687 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Antonio Caggiano 007a4f06 2022-04-22T11:07:05 Vulkan: Wayland resize callback Handle client resize requests and resize the swapchain accordingly after next buffer swap. Bug: angleproject:6902 Change-Id: I8bd6b0d4efac041606f15eccb6befa28594905b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3608089 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jeff Vigil <j.vigil@samsung.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 9070e279 2022-06-30T09:35:59 Vulkan: Handle platforms that have imprecise float division issues Even when the dividend and divisor have the same value some platforms do not return 1.0f. We need to emit sepcial division code on such platforms. Bug: angleproject:3586 Tests: KHR-GLES31.core.blend_equation_advanced.blend*HSL* Change-Id: Ibb81f57c959ae2c8edb6d361bf6241c019dfb988 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3738439 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Antonio Caggiano 0c46c2d9 2022-05-19T16:16:54 Vulkan: Support DRM_FORMAT_MOD_LINEAR Fix a bug while checking for dmabuf image image format support. The value 0 is used for DRM_FORMAT_MOD_LINEAR, which is perfectly valid. DRM_FORMAT_MOD_INVALID could be used instead for bail out. Bug: angleproject:7065 Change-Id: If8eb366873b8f0fe2fd84de745a55171036093d4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3645124 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 723cc880 2022-06-10T17:55:54 Reland "Reland "Vulkan: Destroy DescriptorSet cache when it becomes invalid"" This is a reland of commit 551a26aeedbfd971d6199c8eddb433a4f4ff871c Original change's description: > Reland "Vulkan: Destroy DescriptorSet cache when it becomes invalid" > > This is a reland of commit 0779ccbcd427dcb00e53afa6385fb4e8e2377993 with > the fix for angleproject:7466. When DescriptorPoolhelper gets > release/destroyed, we ensure all sharedCacheKeys are destroyed. > > Original change's description: > > Vulkan: Destroy DescriptorSet cache when it becomes invalid > > > > When a new texture descriptorSet is allocated, we store one reference of > > the cache key in ProgramExecutableVk and all TextureVks that it > > associated with. When any of the TextureVk is destroyed or its view > > destroyed, we immediately erase the descriptorSet from the cache and > > track GPU progress and free the descriptorSet when it's GPU completed. > > That way we delete the dead descriptorSet that will for sure never been > > reused ASAP so that its space is avialable for reuse. > > > > Bug: b/235523746 > > Change-Id: Ib1b9662a254eea5a3f410dc6d5d89fca6727a647 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700226 > > Reviewed-by: Lingfeng Yang <lfy@google.com> > > Commit-Queue: Charlie Lao <cclao@google.com> > > Reviewed-by: Ian Elliott <ianelliott@google.com> > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > Bug: b/235523746 > Bug: angleproject:7466 > Change-Id: I4413bec27ea0ca830010e2ca15036c2e667141c0 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3726964 > Reviewed-by: Ian Elliott <ianelliott@google.com> > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/235523746 Bug: angleproject:7466 Change-Id: I6b88b884841c5dbc625ee7e0c52c45af09dec199 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3741027 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com>
Alexey Knyazev 7cb0622c 2022-06-30T00:00:00 BlitGL: Fix LUMAWorkaround for half-float copies Use desktop HALF_FLOAT enum when running on desktop OpenGL. Bug: angleproject:5038 Change-Id: I829f28ca51caa1f98b653d1a456ed775f8d362cb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3738261 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Mike Schuchardt defd99dc 2022-06-30T16:18:30 Update MSRTSS vulkan struct to final version The public version of VK_EXT_multisampled_render_to_single_sampled released in the 1.3.219 header does not include resolve modes in the VkMultisampledRenderToSingleSampledInfoEXT struct. Remove them to unblock the Chromium auto-roller. Bug: None Change-Id: I9d185a486227edfd3276ccb0df7063ca5101797b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3739583 Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Ian Elliott 4b745c2b 2022-07-01T01:25:36 Revert "Reland "Vulkan: Destroy DescriptorSet cache when it becomes invalid"" This reverts commit 551a26aeedbfd971d6199c8eddb433a4f4ff871c. Reason for revert: Blink test failures at: https://ci.chromium.org/ui/p/chromium/builders/ci/WebKit%20Linux%20MSAN/15546/overview Original change's description: > Reland "Vulkan: Destroy DescriptorSet cache when it becomes invalid" > > This is a reland of commit 0779ccbcd427dcb00e53afa6385fb4e8e2377993 with > the fix for angleproject:7466. When DescriptorPoolhelper gets > release/destroyed, we ensure all sharedCacheKeys are destroyed. > > Original change's description: > > Vulkan: Destroy DescriptorSet cache when it becomes invalid > > > > When a new texture descriptorSet is allocated, we store one reference of > > the cache key in ProgramExecutableVk and all TextureVks that it > > associated with. When any of the TextureVk is destroyed or its view > > destroyed, we immediately erase the descriptorSet from the cache and > > track GPU progress and free the descriptorSet when it's GPU completed. > > That way we delete the dead descriptorSet that will for sure never been > > reused ASAP so that its space is avialable for reuse. > > > > Bug: b/235523746 > > Change-Id: Ib1b9662a254eea5a3f410dc6d5d89fca6727a647 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700226 > > Reviewed-by: Lingfeng Yang <lfy@google.com> > > Commit-Queue: Charlie Lao <cclao@google.com> > > Reviewed-by: Ian Elliott <ianelliott@google.com> > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > Bug: b/235523746 > Bug: angleproject:7466 > Change-Id: I4413bec27ea0ca830010e2ca15036c2e667141c0 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3726964 > Reviewed-by: Ian Elliott <ianelliott@google.com> > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/235523746 Bug: angleproject:7466 Change-Id: Icdde2752c462b7ebbb51d46fd35ce749b5caf377 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3739585 Reviewed-by: Ian Elliott <ianelliott@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Auto-Submit: Ian Elliott <ianelliott@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Shahbaz Youssefi 6cd08bc2 2022-06-28T22:04:07 Vulkan: Don't optimize away flush after clear for single buffer Bug: b/237449314 Change-Id: I04421398e2e68541d4713c7e8b80715be68672b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3733808 Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: mohan maiya <m.maiya@samsung.com>
Geoff Lang 90edbd94 2022-06-30T11:49:33 Metal: Support GL_ANGLE_provoking_vertex This allows some users to get improved performance while using flat attributes by avoiding index buffer rewrites. Bug: chromium:1340620 Change-Id: Ic55dec27e51d8929d6781758104632defc6861c3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3738260 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Auto-Submit: Geoff Lang <geofflang@chromium.org>
Yuxin Hu 1e96beb9 2022-06-29T15:18:35 Suppress the new BestPractice VVL Error Suppress the new best practice VVL Error vkCmdBeginRenderPass-ClearValueWithoutLoadOpClear to unblock the vulken-deps roller. A potential fix is work in progress. Bug: angleproject:7470 Bug: b/237542876 Change-Id: Iaea0cef58984acae79210e72b75be527d98e8286 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3736698 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Charlie Lao 551a26ae 2022-06-10T17:55:54 Reland "Vulkan: Destroy DescriptorSet cache when it becomes invalid" This is a reland of commit 0779ccbcd427dcb00e53afa6385fb4e8e2377993 with the fix for angleproject:7466. When DescriptorPoolhelper gets release/destroyed, we ensure all sharedCacheKeys are destroyed. Original change's description: > Vulkan: Destroy DescriptorSet cache when it becomes invalid > > When a new texture descriptorSet is allocated, we store one reference of > the cache key in ProgramExecutableVk and all TextureVks that it > associated with. When any of the TextureVk is destroyed or its view > destroyed, we immediately erase the descriptorSet from the cache and > track GPU progress and free the descriptorSet when it's GPU completed. > That way we delete the dead descriptorSet that will for sure never been > reused ASAP so that its space is avialable for reuse. > > Bug: b/235523746 > Change-Id: Ib1b9662a254eea5a3f410dc6d5d89fca6727a647 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700226 > Reviewed-by: Lingfeng Yang <lfy@google.com> > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Ian Elliott <ianelliott@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/235523746 Bug: angleproject:7466 Change-Id: I4413bec27ea0ca830010e2ca15036c2e667141c0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3726964 Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 4298a54e 2022-06-23T23:17:12 Clean up OWNERS files Bug: None Change-Id: I93726b8e5226d4c3b40c7d3dc865cb7dbe7c17fe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3721567 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Mohan Maiya d50b2276 2022-06-21T12:05:28 Reland "Vulkan: Support EGL_ANDROID_front_buffer_auto_refresh" This is a reland of commit ef60d38ecf12d6663e9ecccacbff9803b1fba7c6 There are no fixes as the revert itself was a speculative one Original change's description: > Vulkan: Support EGL_ANDROID_front_buffer_auto_refresh > > Cache value of EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID attribute > and set swapchain present mode accordingly when recreating > swapchain in single buffer mode. > > Bug: angleproject:7224 > Tests: EGLAndroidAutoRefreshTest.Basic* > Change-Id: I2dbb92ce5c3fa047e0b02ea9011725311f346027 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3707570 > Reviewed-by: Ian Elliott <ianelliott@google.com> > Commit-Queue: mohan maiya <m.maiya@samsung.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Bug: angleproject:7224 Bug: angleproject:7465 Change-Id: Ia876ea17169c0f1b3afdb7753570e0b1aca985f5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3733521 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi ba737f47 2022-06-27T11:04:21 Vulkan: Don't sync pipeline cache if warm up is effective If the pipeline cache is being warmed up at link time, the blobs corresponding to each program is individually retrieved and stored in the blob cache. This should be enabled only on platforms where draw time pipeline creation hits the cache due to said warm up. As a result, there's no need to store the aggregate cache (the one owned by RendererVk) in the blob cache too. Bug: angleproject:5881 Bug: b/215230983 Change-Id: I2da5de835e6667b0b2d5859e6804791671888947 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3727227 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
angle-autoroll bb373176 2022-06-24T14:19:05 Roll vulkan-deps from 11ad77222bfe to 137b026580e5 (1 revision) Suppress new SYNC-HAZARD-READ_AFTER_WRITE. https://chromium.googlesource.com/vulkan-deps.git/+log/11ad77222bfe..137b026580e5 Changed dependencies: * vulkan-validation-layers: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/620b378993..a0e0e77a22 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 jonahr@google.com,ynovikov@google.com on the revert to ensure that a human is aware of the problem. To file a bug in ANGLE: https://bugs.chromium.org/p/angleproject/issues/entry To report a problem with the AutoRoller itself, please file a bug: https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: angleproject:7456 Tbr: jonahr@google.com,ynovikov@google.com Change-Id: I2ef42cccfabd575cd59c90e6f558b6a46202e028 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3723547 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Jose Dapena Paz 1dc3385a 2022-06-27T18:13:33 libstdc++: move FramebufferHelper to cache utils vk_helper.h includes vk_cache_utils.h. FramebufferHelper was declared in vk_helper.h. And FramebufferCache, in vk_cache_utils.h, requires FramebufferHelper for its payload hashmap. This was solved with a forward declaration. But, with std::pair definition in libstdc++ this is not enough. Bug: chromium:957519 Change-Id: I32e3e247c3c8bef8b52806aa2601e4012e6aa79e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3727671 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Gert Wollny ce4e11d3 2022-06-17T12:21:01 libANGLE: Add a unique ID to the Surface This is needed when capturing Pbuffer calls. Bug: angleproject:4964 Change-Id: Id9f35683bf887f08f916de69bbab8c414e5e8872 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3711740 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov f8690429 2022-06-27T13:50:44 Revert "Vulkan: Destroy DescriptorSet cache when it becomes invalid" This reverts commit 0779ccbcd427dcb00e53afa6385fb4e8e2377993. Reason for revert: crashes in blink_web_tests on linux-rel https://ci.chromium.org/ui/p/chromium/builders/try/linux-rel/1051045/overview Original change's description: > Vulkan: Destroy DescriptorSet cache when it becomes invalid > > When a new texture descriptorSet is allocated, we store one reference of > the cache key in ProgramExecutableVk and all TextureVks that it > associated with. When any of the TextureVk is destroyed or its view > destroyed, we immediately erase the descriptorSet from the cache and > track GPU progress and free the descriptorSet when it's GPU completed. > That way we delete the dead descriptorSet that will for sure never been > reused ASAP so that its space is avialable for reuse. > > Bug: b/235523746 > Change-Id: Ib1b9662a254eea5a3f410dc6d5d89fca6727a647 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700226 > Reviewed-by: Lingfeng Yang <lfy@google.com> > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Ian Elliott <ianelliott@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/235523746, angleproject:7466 Change-Id: I7e5067de2f2add08af1f9804cc2e952238b2e942 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3726097 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Yuly Novikov 46ddcc44 2022-06-27T14:53:31 Revert "Vulkan: Support EGL_ANDROID_front_buffer_auto_refresh" This reverts commit ef60d38ecf12d6663e9ecccacbff9803b1fba7c6. Reason for revert: crashes in end2end tests on Win Intel Vulkan Original change's description: > Vulkan: Support EGL_ANDROID_front_buffer_auto_refresh > > Cache value of EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID attribute > and set swapchain present mode accordingly when recreating > swapchain in single buffer mode. > > Bug: angleproject:7224 > Tests: EGLAndroidAutoRefreshTest.Basic* > Change-Id: I2dbb92ce5c3fa047e0b02ea9011725311f346027 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3707570 > Reviewed-by: Ian Elliott <ianelliott@google.com> > Commit-Queue: mohan maiya <m.maiya@samsung.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Bug: angleproject:7224, angleproject:7465 Change-Id: Ia48a31124c8e0a3e4bcd4b7dc6f62b0782b42d97 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3726099 Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Steven Noonan 10f065e2 2022-06-23T13:23:09 Vulkan: support QCOM_shading_rate on Intel graphics When querying fragment shading rates, we were limiting the result array to 6 elements, which was not enough on Intel's Windows graphics drivers. Those drivers report more than 6 fragment shading rates, including a bunch of strange ones like 4x1 and 1x4. Because we limited the list to 6 elements, and the Vulkan specification requires that the rates be listed in order from largest width to smallest, the feature check was missing the smaller shading rates (including 1x2 and 1x1). This caused the supportsFragmentShadingRate feature to be disabled. Bug: angleproject:7461 Bug: angleproject:7172 Change-Id: I1b9a2924f93fdb803c20cfa388749754691b6e92 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3720732 Auto-Submit: Steven Noonan <steven@valvesoftware.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: mohan maiya <m.maiya@samsung.com>
Dan Glastonbury de109f9e 2022-06-23T11:50:43 Metal: Maintain BufferPool freelist constraint BufferPool needs to maintain the requirement of the free list that buffers in use by the GPU are stored in FIFO order and that after the first in-use buffer, the rest of the free list is in-use as well. Bug: angleproject:7453 Change-Id: Ibae45fb0212030217d03fe4623c412d693674fd1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3717663 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Eddie Hatfield 707323c1 2022-06-21T18:53:05 Miscellaneous C++17 refactoring Bug: angleproject:6747 Change-Id: I792ba74e03145ff6c3cc97d4bff6327ab275a2c7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3719001 Commit-Queue: Eddie Hatfield <eddiehatfield@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Mohan Maiya ef60d38e 2022-06-21T12:05:28 Vulkan: Support EGL_ANDROID_front_buffer_auto_refresh Cache value of EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID attribute and set swapchain present mode accordingly when recreating swapchain in single buffer mode. Bug: angleproject:7224 Tests: EGLAndroidAutoRefreshTest.Basic* Change-Id: I2dbb92ce5c3fa047e0b02ea9011725311f346027 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3707570 Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
Yuxin Hu 4c5e9d47 2022-06-21T17:12:56 Do not defer clear if FBO attachment is AHB image When application uses Android Hardware Buffer (AHB) image as the Framebuffer Object (FBO) attachment, it is possible the app doesn't call glReadPixels to fetch the FBO color. In this case deferred clears will not be flushed when the app reads the FBO pixel color, and the app will read the old FBO color. This CL fixes the issue by flushing the glClear calls immediately when any of the FBO color attachments is AHB image. Bug: b/236394768 Bug: angleproject:7458 Change-Id: I9151ab57750007c4ac18af39c3fa4abe752ede5e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3715851 Reviewed-by: Lingfeng Yang <lfy@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi e50351cb 2022-06-10T22:28:58 Vulkan: Don't close render pass on framebuffer fetch For applications that use framebuffer fetch in the same RP as non-fetch programs, we can save some extra RenderPasses by always creating our RP objects with input attachments enabled. This works almost identically except for needing to use the images in a "GENERAL" layout instead of "COLOR_ATTACHMENT_OPTIMAL". According to partners it is possible to achieve performance parity even with GENERAL layout. To remove any potential negative impacts of using the GENERAL layout, the context enters this always-framebuffer-fetch mode only and as soon as a framebuffer fetch program is created. Applications that don't use framebuffer fetch are thus unaffected. This eliminates 20 render passes in the Genshin Impact trace (out of about 58). On a Pixel 6 the resulting benchmark score speeds up by ~25%. For Real Racing 3, the speed up is ~30%. Based on change by jmadill@chromium.org Bug: angleproject:7375 Change-Id: Ib6c73e95d06229f8545d502b388ee2a55a582323 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3697308 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Eddie Hatfield 91976352 2022-06-21T15:41:02 Use C++17 attributes instead of custom macros Bug: angleproject:6747 Change-Id: Iad6c7cd8a18d028e01da49b647c5d01af11e0522 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3718999 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 0779ccbc 2022-06-10T17:55:54 Vulkan: Destroy DescriptorSet cache when it becomes invalid When a new texture descriptorSet is allocated, we store one reference of the cache key in ProgramExecutableVk and all TextureVks that it associated with. When any of the TextureVk is destroyed or its view destroyed, we immediately erase the descriptorSet from the cache and track GPU progress and free the descriptorSet when it's GPU completed. That way we delete the dead descriptorSet that will for sure never been reused ASAP so that its space is avialable for reuse. Bug: b/235523746 Change-Id: Ib1b9662a254eea5a3f410dc6d5d89fca6727a647 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700226 Reviewed-by: Lingfeng Yang <lfy@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Kenneth Russell 338c6539 2022-06-22T10:22:22 Set pixel unpack state in GL backend's CompressedTexImage3D. A workaround added earlier wasn't applying to the GL backend because of this missing call. Covered by existing angle_end2end_test, but only reproduces on ASAN build. A Chromium-side test is being added separately. Bug: chromium:1335688 Change-Id: Ia33648054dfa647159ecfc62ca53415de04f625d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3715717 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Le Hoang Quyen 6c8bb1f3 2022-06-21T06:06:29 Metal: Fix invalid iosurface texture after base/max lvl changed Changing base/max lvl invalidated previously bound iosurface's texture. This caused conformance/canvas/webgl-to-2d-canvas.html failure. Fix by rebinding the iosurface's texture after base/max lvl changed. Bug: chromium:1337324 Change-Id: I28f84b0ac28695221997571f71c476e802cbfac3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3715729 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
Shahbaz Youssefi 6d3c6370 2022-06-18T00:13:56 Vulkan: Fix 180 and 270 degree rotated resolve Bug: angleproject:7197 Bug: b/235877059 Change-Id: I4d4ee622f49bb3218449414a1f0dd91fa4e4f541 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3708997 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Faye Zhang 714f680f 2022-06-08T16:19:20 Implement GL_EXT_base_instance * Added the validation functions for DrawElementsInstancedBaseVertexBaseInstance(), DrawElementsInstancedBaseInstance(), and DrawArraysInstancedBaseInstance() according to the specs. * Added generic implementation for glDrawElementsInstancedBaseInstance() that can be called by back-ends. * Added flags for back-ends so they can enable the extension. * Added tests for DrawElementsInstancedBaseVertexBaseInstance(), glDrawElementsInstancedBaseInstance(), and DrawArraysInstancedBaseInstance(). * Disabled ES3_D3D11__DynamicDraw tests due to angleproject:7441 bug. Bug: angleproject:6983 Bug: angleproject:7441 Change-Id: Ia664b01c87bc64c05e29adec23a8f80792eaa037 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3697206 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Faye Zhang <ffz@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Mohan Maiya 878bbfaa 2022-06-17T11:48:14 Vulkan: Account for 2DArray textures during robust resource init Correctly handle layer count and depth when the texture type is 2Darray. Vulkan requires depth of 1 for 2Darray textures. This also reverts commit c59a22e587e63cbe9942a7f0b78681ee25084cc4. Bug: angleproject:3189 Bug: angleproject:4691 Bug: angleproject:7389 Bug: angleproject:7438 Test: DXT1CompressedTextureTestES3.CompressedTexSubImage3DValidationPerSlice*Vulkan Change-Id: Ifb3b9cabd4786dcced750e3c2db90e350d455098 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3712220 Reviewed-by: Lingfeng Yang <lfy@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi 7f57d12b 2022-06-17T22:29:36 Vulkan: Disable cache warmup on ChromeOS SwANGLE A number of browser tests fail due to the cache warm up changing the timing of the tests. The bug is in the tests, but this change unblocks ANGLE roll into Chromium. Bug: angleproject:7440 Change-Id: Ie2d7618bfc367bd34f9b99982c9323c99188c626 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3708995 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 0a7cfa08 2022-06-16T16:24:54 Vulkan: Fix marking external images as renderable Bug: chromium:1266094 Change-Id: Ie8d7b82f859697530f6581c7109d773d6fa35d37 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3710690 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 72e457fe 2022-06-03T15:36:01 Vulkan: Promptly destroy cached framebuffer when it becomes invalid When Texture gets respecified, the VkFramebuffer cache created out of it becomes invalid and will never possibly get used. Before this CL, we never clear such invalid framebuffer objects from the cache. This CL keeps a reference to the cache key in each attachment and will immediately destroy the cached VkFramebuffer object when one of the attachment has become invalid. Bug: b/234769934 Change-Id: Ib01f6dffe9211084b1ada340081daf905e3f1bef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3682164 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 97a6e581 2022-05-30T16:50:26 Vulkan: Useful implementation of program binaries ANGLE already serializes the pipeline state for the sake of OES_get_program_binary. This serialization had limited usefulness however, since the Vulkan driver hasn't actually created any pipelines yet (which is a costly part of program creation). Simultaneously, ANGLE deferred Vulkan pipeline creation to draw time, which causes hitching. In this change, a handful of Vulkan pipelines are precreated at link time; those at least that are sure to create different blobs in the pipeline cache (different spec consts or SPIR-V generation). These pipelines are created in the program executable's cache. The cache is then merged into the shared renderer cache (for potential blob reuse by other programs). With this, two goals are achieved: - Most pipelines created at draw time hit the pipeline cache, avoiding costly compilation. - When the program binary is retrieved, the contents of the program executable's pipeline cache is also returned. On reload, the cache is recovered, resulting in faster startup. Bug: angleproject:5881 Change-Id: I46c5451a7d0b16dffd40e44015e094640886880b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3671977 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 0bc70e96 2022-06-10T22:27:04 Vulkan: Rename getShareGroupVk to getShareGroup + other miscellaneous clean up Bug: angleproject:7375 Change-Id: I25690860478a2fd181a67ce2b6cb4d7aac7dbaa7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3700197 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 8a8b9665 2022-06-08T14:54:37 Vulkan: Prune superseded staged updates in a texture Add support for pruning superseded staged updates from a client buffer to the texture. If the staged update count or the cumulative staged updates' size exceeds a threshold we check for superseded updates and prune the list. Bug: angleproject:4691 Bug: angleproject:7389 Test: Texture2DTest.InterleavedSupersedingTextureUpdates* Texture2DTest.ManySupersedingTextureUpdates* Change-Id: I4b84f13fa20004a3dc68baa552a0af656d92c0a1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3691092 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Dan Field 3faaded8 2022-06-15T11:28:58 Missing include for std::isdigit Bug: angleproject:7430 Change-Id: I2b374c826c4b29a4e290378a3cd18d2df49268b6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3708312 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Ian Elliott 3c81c9d1 2022-06-14T19:24:27 Enable perFrameWindowSizeQuery on Android It was decided that Android won't return VK_SUBOPTIMAL_KHR when the window size changes. Android's Vulkan loader no longer needs IPC to implement vkGetPhysicalDeviceSurfaceCapabilitiesKHR(). Therefore, we will call vkGetPhysicalDeviceSurfaceCapabilitiesKHR() per eglSwapBuffers() on Android. Bug: b/236026298 Change-Id: I3f66148ef5ed456e4408d64cc38fc6e0fe8b17cd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3706160 Reviewed-by: Chris Forbes <chrisforbes@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Ian Elliott <ianelliott@google.com> Auto-Submit: Ian Elliott <ianelliott@google.com>
Shahbaz Youssefi 3dfc8004 2022-06-08T14:24:48 Vulkan: Optimize sync followed by swap Previously, inserting a sync object immediately caused a submission. That was done in https://chromium-review.googlesource.com/c/angle/angle/+/3200274 to be able to wait until the sync object is signaled without having to wait for whatever is recorded after it until a flush naturally happens. Some applications issue a glFenceSync right before eglSwapBuffers. The submission incurred by glFenceSync disallowed the optimizations that eglSwapBuffers would have done, leading to performance degradations. This could have been avoided if glFenceSync was issued right after eglSwapBuffers, but that's not the case with a number of applications. In this change, when a fence is inserted: - For EGL sync objects, a submission is issued regardless - For GL sync objects, a submission is issued if there is no render pass open - For GL sync objects, the submission is deferred if there is an open render pass. This is done by marking the render pass closed, and flagging the context as having a deferred flash. If the context that issued the fence sync issues another draw call, the render pass is naturally closed and the submission is performed. If the context that issued the fence sync causes a submission, it would have a chance to modify the render pass before doing so. For example, it could apply swapchain optimizations before swapping, or add a resolve attachment for blit. If the context that issued the fence sync doesn't cause a submission before another context tries to access it (get status, wait, etc), the other context will flush its render pass and cause a submission on its behalf. This is possible because the deferral of submission is done only for GL sync objects, and those are only accessible by other contexts in the same share group. Bug: angleproject:7379 Change-Id: I3dd1c1bfd575206d730dd9ee2e33ba2254318521 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3695520 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao 4c6d47c8 2022-06-08T15:20:49 Vulkan: Optimize glEGLImageTargetTexture2DOES with same args If we are creating a texture with the same source eglImage, right now we will release the existing mImage (will not actually destroyed) and then free VkImageViews. Then it point back to the same mImage and allocate new VkImageViews. Since these ImageViews have different serial number, we end up with DescriptorSet cache miss. This CL avoid all these hassles if we are creating with the exact same image. Bug: b/234602034 Change-Id: I04cec05716974e274d6e3678e91ff248f50e9355 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3697204 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Auto-Submit: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 715175de 2022-06-03T22:11:30 Vulkan: Don't enable Qualcomm workarounds on OSS driver Bug: b/217265716 Change-Id: I09cf38a36f8297912f0c26867155cf4f9e145919 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3689810 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Chia-I Wu <olv@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@google.com>
Shahbaz Youssefi da9390d6 2022-06-08T22:38:18 Vulkan: Fix the VulkanRenderPassBufferCount overlay widget This widget was declared as a histogram, but used as a graph. The graph's add() interface is made hidden in histograms to avoid such mistakes in the future. Bug: angleproject:4950 Change-Id: I95a1b6badbe27b870273589271b13c454c8a4e56 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3697438 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 2587e508 2022-05-26T17:44:47 Vulkan: Remove redundant vertex array dirty bit processing When BINDING0+n and ATTRIB0+n dirty bits are both set, we are going down syncState twice. What BINDING0+n covers all the work needed for attribute and DATA0+n, so we should remove the ATTRIB0+n and DATA0+n. Similarly if we see DATA0+n, we should skip ATTRIBU0+n as well. Bug: b/235277703 Change-Id: I5e03c18bac3df30a14f3b6652caff2aff33f2fe6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3669608 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Ian Elliott 0f8f760d 2022-06-07T17:52:52 Disable KHR_no_error for Android/SwiftShader Speculatively fix crash in Skia on ANGLE that has been happening. In addition, prevent other crashes in the future. Bug: b/220069903 Change-Id: I01b9896a6feb8be524849dafbc1df9526fc98754 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3694160 Commit-Queue: Ian Elliott <ianelliott@google.com> Auto-Submit: Ian Elliott <ianelliott@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu 5fbb0417 2022-05-26T15:05:52 Vulkan: Handling VK_EXT_load_store_op_none on ARM There is a bug on at least one ARM device when either depth or stencil load op is none. Add a temporary work around to avoid this case for ARM driver until angleproject:7370 is addressed. Also add a test to reproduce the deqp test failures with simiplied draw calls. Bug: angleproject:7370 Bug: angleproject:7351 Change-Id: I74ac49a75f85b1e006ed3b1d77f234f63d314ae0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3671696 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi d47c8e0a 2022-04-04T15:08:45 Vulkan: Enable custom border colors on SwiftShader This extension can now be enabled on SwiftShader after bug fixes that landed in https://swiftshader-review.googlesource.com/c/SwiftShader/+/64688 and https://swiftshader-review.googlesource.com/c/SwiftShader/+/66148 Bug: angleproject:6200 Bug: b/227518327 Change-Id: I65fb342a96c47b1ea5ba2ee773c8ae5539052b94 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3569585 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Dan Field 4b9eb4ba 2022-06-03T09:22:41 Optionally support vulkan_memory_allocator 3.x Incompatible API is guarded behind a new define, ANGLE_VMA_VERSION. This allows a soft migration for Chromium and Fuchsia, while allowing clients like Flutter to roll to a new version that is compatible with its revision of Skia. Bug: chromium:1332566 Change-Id: I68cafde13e50445aa8eea2f18203143659a1c627 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3688835 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Dan Field <dnfield@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>