src/libANGLE/renderer/vulkan


Log

Author Commit Date CI Message
Cody Northrop 14f8918c 2021-04-16T09:17:29 Migrate more scripts to python3 Test: python3 scripts/run_code_generation.py Bug: angleproject:5707 Change-Id: I5abae69c1c6bf03cc418f10beaabc80288fa1c94 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2828979 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Jamie Madill 0c77f3ad 2021-03-10T15:58:00 Vulkan: Implement shader buffers descriptor cache. Implements a descriptor set cache for UBOs, SSBOs, and atomic counter buffers. Storage Images and framebuffer fetch input attachments are not yet included. Requires moving the buffer barrier handling into ContextVk, similarly to how we handle the barriers for Textures. The packed description key for the descriptors uses a "fast" vector with a basic minimum size. For most cases of a few buffers this will fit easily in stack memory, but for larger programs with many buffers we fit this into heap memory. The key has a large upper bound due to the high ES 3.2 requirements and the need to index several values such as the offset and binding size. We use dynamic offsets for uniform buffers when possible. This ensures applications like Manhattan 3.1 that use sets of common buffers with changing offsets hit the cache most of the time. Because of resource limits we pick at compilation time whether to use dynamic or static descriptor sets. Mostly this applies to tests that use a large number of uniform buffers. A future implementation could be smart and would recompile the program with heuristics to use a minimal number of dynamic indices. Reduces the number of descriptor set updates from ~300 -> ~30 per frame in Manhattan 3.1 and in Asphalt 9 from 900+ to as low as 0 per frame. Bug: angleproject:5736 Change-Id: I5c2a3881bec90d301dab15cc86c8a70e60674ad7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2757515 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao fb288312 2021-04-12T12:38:03 Vulkan: Consolidate mReadOnlyDepthStencilMode to mRenderPassUsageFlags Since now ImageHelper object has a mRenderPassUsageFlags tracking how it is been used by current RenderPassCommands, we can consolidate mReadOnlyDepthStencilMode into a bit in the mRenderPassUsageFlags. The read only mode is just a special attachment mode, so this makes code more consistent and able to get rid of the extra dword for mReadOnlyDepthStencilMode. Bug: b/181797383 Change-Id: Ie9b7be1c18c392e5b2712bdae6ab6506de8d6d34 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2821942 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 5eac3169 2021-04-09T15:54:11 Vulkan: Support sample/render to depth texture with different LOD Previously we supported read only depth attachment that attachment and sample are using the same texture. It was always assuming it will be read only if the same texture is attached to FBO and same time bound to texture unit. But we never supported if it actually writing to depth texture, but at the different level with sampling. This is supported OpenGL operation as long as the levels render to is outside [base_level, max_level]. Later on, we added support of the above operation, but limited to color buffers. This CL extends the same support of render and sample to the same depth texture with non-overlapping levels. Android game black desert mobile is running into this usage case. Bug: b/181797383 Change-Id: I7ee1d52f27603f933102ad1b098684309449c406 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2819487 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Ian Elliott 9c51f93d 2021-04-12T16:49:53 Don't call {begin|end}DebugUtilsLabelEXT() when not enabled The ContextVk::handleDirtyEventLogImpl() and ContextVk::endEventLog() methods called the {begin|end}DebugUtilsLabelEXT() methods when the VK_EXT_debug_utils extension is not enabled. This manifests when enabling/using VVL stand-alone (i.e. when the the debug-utils extension is not also present). Bug: b/183133198 Change-Id: I043b174d457a8796831184c092661f24b33c1db4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2821943 Commit-Queue: Ian Elliott <ianelliott@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Tim Van Patten <timvp@google.com>
Mohan Maiya c8ee13c7 2021-04-02T12:19:33 Vulkan: Fix a validation bug in glBeginTransformFeedback Add logic to check the program or the pipeline before erroring out when validating glBeginTransformFeedeback. Bug: angleproject:5557 Test: ProgramPipelineXFBTest31.VaryingIOBlockSeparableProgramWithXFB* Change-Id: I0df8a8d87b3632745bc91dc2673f2fac31c6cdb1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2743440 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Geoff Lang 065c2329 2021-04-08T11:59:43 Reland "Vulkan: Add features to modify sampling parameters" This reverts commit a51b57fa2dc73f8bc8acdf0b818cc0315fb23d75. Original change's description: > Revert "Vulkan: Add features to modify sampling parameters" > > Bug: b/167404532 > Change-Id: Iae19dfe165074e8c01216312bddd744c4fb504a4 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2510012 > Commit-Queue: Geoff Lang <geofflang@chromium.org> > Reviewed-by: Tim Van Patten <timvp@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> Bug: b/167404532 Change-Id: I2c756b8eb0f61701ef6e33275e557bc199a4d3b4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2815259 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Nicolas Capens 15f4925a 2021-04-12T15:38:10 Restore EGL_EXT_buffer_age for SwiftShader Vulkan EGL_EXT_buffer_age was previously disabled for SwiftShader Vulkan because of an Android test timing out on Cuttlefish when the buffer age is queried. aosp/1672445 addresses the root cause of the timeout, so EGL_EXT_buffer_age can be supported again. Bug: b/182521420 Bug: angleproject:3529 Change-Id: I5949f721316855d9138eb9f657a6df4e7b49ed71 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2821750 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Nicolas Capens <nicolascapens@google.com>
Shahbaz Youssefi 3813c361 2021-04-12T11:45:46 Vulkan: More perf warning for vertex format conversion The perf warning was previously only issued when a GPU buffer had to be converted. This change adds a warning when client data needs to change format too. Bug: b/184355822 Change-Id: I3539e22f277593d60e5e1ce172baf7b8db0477fa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2821751 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Shahbaz Youssefi 0273ea3f 2021-04-06T16:23:39 Vulkan: Use RGBA16_FLOAT for buffer format fallback ... instead of RGBA32_FLOAT. VK_FORMAT_R16G16B16A16_SFLOAT has mandatory support for vertex buffers. Bug: b/184163871 Change-Id: I7ef2933cd15e46bb984e6fd1b020d2ec15b9c60e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2807780 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Ian Elliott b17a9317 2021-04-09T14:39:37 Vulkan: damage rectangles must never be pre-rotated Remove the SurfaceVk::present() code that rotated damage rectangles and the feature flag that controlled that rotation. The Vulkan specification was changed so that the rectangles provided to the VK_KHR_incremental_present extension must never be pre-rotated. The spec change requires the same behavior on all platforms (just in case), even though Android is the only platform known to support rotation. FYI: the Vulkan spec change was merge request 4442. Bug: b/182930524 Change-Id: I5128fd76e718f3d964c9091830bcc5886d265543 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2818826 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Ian Elliott fedb85b7 2021-04-07T16:25:54 Vulkan: Warn for unsupported vertex attrib format Provide both a performance warning and a debug-util label (for AGI) when loading a vertex attribute requires a format conversion. Bug: b/184355822 Change-Id: Id8cbb34f70214327e1f5cc96559e4ea66dc17889 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2801154 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi ba7531da 2021-04-07T12:51:17 Add tests that use, then update, then use buffers This triggers vk::DynamicBuffer allocations in BufferVk. Bug: angleproject:5719 Change-Id: Ida855b23618497f76102e55f89ab1678f9c08753 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2809856 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao e249239c 2021-04-08T09:46:48 Vulkan: Add featue flag to force highp to mediump in fragment shader. Adding feature flag that forces highp in fragment shader to mediump. It is disabled by default. You can enable it for experiment. Bug: b/184850002 Change-Id: I73980be4ad160eb1b17a3a3ecfc09f2e4aeb468c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2815240 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Tim Van Patten d3e1a7ff 2021-03-29T16:21:23 Reset mCurrentGraphicsPipeline in ProgramExecutableVk::reset ContextVk::mCurrentGraphicsPipeline should be reset during ProgramExecutableVk::reset() since programInfo.release() frees the PipelineHelper that it's pointing to. This has resulted in several use-after-free errors, which this CL will prevent in the future. Bug: angleproject:5624 Bug: b/182409935 Change-Id: I847bb7eb5b593c89b84f0fbbca23ea5367f5f55c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2792861 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Brandon Schade 5af6306a 2021-03-31T23:23:52 Vulkan: Update layer provoking vertex for geometry shaders Set the GS layer provoking vertex value to GL_LAST_VERTEX_CONVENTION if the provoking vertex extension is enabled. Otherwise, use GL_FIRST_VERTEX_CONVENTION as vulkan follows this convention for provoking vertex. Tests: dEQP-GLES31.functional.geometry_shading.layered.layer_provoking_vertex_* Bug: angleproject:5452 Change-Id: Ie385f3b713486c54114dbfcefd799d180701bb60 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2799033 Commit-Queue: Brandon Schade <b.schade@samsung.com> Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill efc53d0f 2021-04-03T21:30:15 Vulkan: Refactor to descriptor offset array. This is in preparation for using dynamic offsets for other sets than the default descriptors. Bug: angleproject:5736 Change-Id: I546e688ad57a35b380f8d7f303ffc0c62773ac18 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2804813 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Jamie Madill 2ef1e0fc 2021-04-06T23:07:41 perf_test_runner: Enable all trace tests. Will allow running "null" Mock ICD tests. Also fixes a crash running the Mock ICD with the overlay. Bug: angleproject:5736 Change-Id: I42e3943a0de00dbab3ee125f1946afd22b38fec6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2809096 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
John Plate 2489a0c1 2021-04-06T14:55:11 Fixed OpenCL headers for Windows Bug: angleproject:5761 Change-Id: I29d1fd3bf862728a3e78418a4f98219828394452 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2807717 Commit-Queue: John Plate <jplate@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao 6d905c76 2021-04-01T13:58:42 Vulkan: Remove initImmutableImage and use initImage instead This is follow up of crrev.com/c/2368038. There was concern that initImmutableImage and initImage are a bit duplicated. This CL gets rid of initImmutableImage and uses initImage instead. Bug: b/181800403 Change-Id: I2c73c7ce979792cc762214f1e5ef9978eeab6212 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2800422 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 92d3912d 2021-04-01T10:49:14 Vulkan: Remove maxLevel and immutable from ImageHelper::initExternal Now that we have removed mBaseLevel and mMaxLevel from ImageHelper class in previous two CLs. The initExternal function can be modified to not pass in base/max level information. This CL also removes immutable from argument and let caller directly pass in firstLevel to it. Bug: b/181800403 Change-Id: I595c1faffabc7582af35a9578b2ecdf00c39207f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2800414 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill f34b40da 2021-04-06T17:56:48 Vulkan: Suppress draw-time push constant VVL warnings. VUID-vkCmdDraw-None-02698 VUID-vkCmdDrawIndexed-None-02698 VUID-vkCmdDrawIndirect-None-02698 VUID-vkCmdDrawIndirectCount-None-02698 VUID-vkCmdDrawIndexedIndirect-None-02698 VUID-vkCmdDrawIndexedIndirectCount-None-02698 VUID-vkCmdDispatch-None-02698 Bug: angleproject:5821 Change-Id: Ic8ca6178ce50b409ac8d256848654f43f91fae8e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2808854 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Charlie Lao afd32d8e 2021-03-30T15:50:57 Vulkan: Remove mMaxLevel from ImageHelper class This CL removes mMaxLevel from ImageHelper class. Instead, it now uses front end's max level information when possible. Bug: b/181800403 Change-Id: Ie0f6bd11e3ca0d4ddfc98f21261396c4d71b7140 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2796153 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Charlie Lao 08b7c55c 2021-03-30T13:51:04 Vulkan: Remove mBaseLevel from ImageHelper class This removes mBaseLevel from ImageHelper class. With the mFirstAllocatedLevel tracking exactly which GL level has been allocated, this cached mBaseLevel is no longer needed. Bug: b/181800403 Change-Id: I99d66c93b0c8f1bd20a5811b51f512a27927201e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2795275 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 41a34d6b 2021-04-03T16:43:58 Vulkan: Use constants for descriptor types. This will make it easier to substitute in the future. Bug: angleproject:5736 Change-Id: I0686c4c396e9f12cfb71253ccd9aa491a7942826 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2804812 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Charlie Lao b5a71140 2020-08-20T17:24:21 Vulkan: Make storage actually immutable for immutable textures The immutable textures are intended to be "immutable". Right now we are still re-allocating VkImage object based on base_level and max_level. This causes a problem for rendering to a level that is beyond [base_level, max_level], which is totally within OpenGL spec. This CL makes an immutable texture always allocate from 0 to max levels that are specified by a glTexStorage call. Changing base_level will not trigger re-allocation of VkImage object. Bug: b/181800403 Change-Id: I4b4ddea17b7f6f7bfd8f36bfe8bb3a35b5c180b6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2368038 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Mohan Maiya 4cdbdf90 2021-03-25T18:54:50 Vulkan: Assign XFB location first then assign varying location Varying location is determined based on XFB location. If the transform feedback stage is Vertex, there is no problem. But if the transform feedback stage is GS or TES, previous implementation can cause shader interface mismatch. Bug: angleproject:5557 Test: KHR-GLES32.core.tessellation_shader.tessellation_control_to_tessellation_evaluation.gl_in Change-Id: I1ecc7913a178c9e674307c528d1bdf13aabcb665 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2784713 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Mohan Maiya f54191ab 2021-03-25T12:27:02 Vulkan: Add YUV G8_B8R8_2PLANE_420_UNORM support. Add support for YCbCr_420_888 and YCrCb_420_888 formats, more commonly known as NV12 and NV21. Bug: angleproject:5773 Change-Id: I1568d543c221ad110e7f199eb2ffd5df23a6134e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2787251 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao fd3b8faf 2021-03-30T11:55:49 Vulkan: Split fragment shader from ColorAttachmentAndAllShadersRead Even though it is not common usage case that the same texture is used as attachment and texture, but aztec ruins is using it. And earlier version of gfxbench's T-Rex also running into this. So performance is still important. This CL splits the texture from fragment shader usage case out so we can have lighter barrier. Bug: angleproject:5780 Change-Id: Ifdcbfe24488fdac62826c5af6ecfbb05f87c0499 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2795269 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi aac1b494 2021-03-26T21:52:30 Vulkan: Remove spam output regarding pipeline cache The warning regarding pipeline cache not having been found in the blob cache is of little utility. Between emitting it once and not at all, concensus was on the latter. Bug: angleproject:4722 Change-Id: I6d6b2758035e8c5e880b77c5f5be84772cb58a18 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2788812 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Tim Van Patten 0af8cfa7 2021-03-17T17:43:03 Reland "Save/Load missing members" This is a reland of b2e76cf58fc012b068aab4716a432bb8951e93e3 Always call saveLinkedStateInfo() so we fill in the necessary values with valid data for monolithic programs also. Original change's description: > Save/Load missing members > > There are several class/struct members that are missing when a program > is serialized/deserialized. This leads to errors when attempting to link > programs that have been deserialized. For example, when drawing with a > PPO that contains programs which were created with glProgramBinary(). > > This CL adds saving/loading the missing members. > > Bug: b/182409935 > Change-Id: I637c6cd8c174acd6da8d51433893323a32e5d7c0 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2770683 > Commit-Queue: Tim Van Patten <timvp@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Cody Northrop <cnorthrop@google.com> Bug: b/182409935 Bug: angleproject:5793 Change-Id: I07ca8f5dfed8c0a9eac3a0defb1602d2ba021c5f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2782189 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 776c6015 2021-02-26T00:00:57 Vulkan: Call glslang at compile time With this change, the ANGLE translator immediately compiles the generated GLSL into SPIR-V with glslang and discards the source. This is in preparation for generating SPIR-V directly, by making the frontend and backend already able to digest it. This change also allows the expensive glslang calls to be parallelized, improving the following perf test by about 20%: LinkProgramBenchmark.Run/vulkan_compile_and_link_multi_thread Previously, the test was run as such in the Vulkan backend: Main Thread 1 Thread 2 Compile1 ---> Compile2 ---------------------> Translator Translator <--- <--------------------- Link glslang for shader1 glslang for shader2 Done With this change, it is run as such: Main Thread 1 Thread 2 Compile1 ---> Compile2 ---------------------> Translator Translator glslang glslang <--- <--------------------- Link Done glslang_wrapper_utils no longer interacts with glslang! A rename will follow. Bug: angleproject:4889 Change-Id: If4303e8ba0ba43b1a2f47f8c0a9133d0bee1a19a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2721195 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya f28d63e9 2021-03-24T11:14:24 Vulkan: Enable glBlitFramebuffer for EXT_sRGB_write_control Implements support for the glBlitFramebuffer edge case in the EXT_sRGB_write_control spec, and fully exposes this extension. Bug: angleproject:5075 Test: SRGBFramebufferTest*.*Vulkan* Change-Id: I05f044abbc5cb272825d1fc4b9028217f18e63c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2785641 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Charlie Lao 9a79ee78 2021-03-22T17:56:28 Vulkan: Add A few other *-None-04584 VVL error to skip list If app uses textureLoad to fetch a texture level and mean time renders to the same texture but with different level, this will generate vulkan validation errors. Previously we are only skipping VUID-vkCmdDraw-None-04584, but it is necessary to skip all other-04584 VVL error that stem from other draw calls as well. Aztec ruins can run into VUID-vkCmdDrawIndexed-None-04584 on QComm GPU, for example. Bug: b/175584609 Change-Id: I2da6945415975350e36f533f007ae1e2a5feddfd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2780563 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Amy Liu 1fb7f648 2021-03-18T16:17:25 Compression of the data from vkGetPipelineCacheData. The size of pipelineCacheData sometimes is greater than 64k which cannot be saved because of the Android blob cache limitation (single cache data size should be < 64k). Implement the compression to store more cache data. Re-land this patch before fixing the performance regression of big pipeline cache. Bug: angleproject:4722 Change-Id: I4bc05a88334c3e7e9e945d1a0877429db1750422 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2771840 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
David Reveman 3fd439c2 2021-03-23T21:40:11 [Fuchsia] Add ifndefs to vulkan_fuchsia_ext.h This allows chromium to build with upstream headers that include these extension. The old TEMP enums and structure types are used until drivers have been updated to support upstream header values. Bug: chromium:1191605 Change-Id: I25d2991204ca34956298013138af8f48e0aaefaf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2782765 Commit-Queue: David Reveman <reveman@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi d1462228 2021-03-09T11:25:36 Vulkan: Use VK_EXT_multisampled_render_to_single_sampled Additionally, makes the emulation path not require independentResolveNone. This was only used to select the NONE resolve mode when the attachment format doesn't have either of depth or stencil aspects, but it's ok to specify the same resolve mode for both aspects even if one aspect is missing. Bug: chromium:1088005 Change-Id: Ifc37cbf5331145179c5927853b996a0d62b871ee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2743666 Reviewed-by: David Reveman <reveman@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 2a43f43a 2021-03-23T15:35:30 Revert "Save/Load missing members" This reverts commit b2e76cf58fc012b068aab4716a432bb8951e93e3. Reason for revert: Causing MSan failures on Linux. See bug. Bug: chromium:1191344 Original change's description: > Save/Load missing members > > There are several class/struct members that are missing when a program > is serialized/deserialized. This leads to errors when attempting to link > programs that have been deserialized. For example, when drawing with a > PPO that contains programs which were created with glProgramBinary(). > > This CL adds saving/loading the missing members. > > Bug: b/182409935 > Change-Id: I637c6cd8c174acd6da8d51433893323a32e5d7c0 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2770683 > Commit-Queue: Tim Van Patten <timvp@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Cody Northrop <cnorthrop@google.com> Bug: b/182409935 Change-Id: I1209257ed6bb55ba2d01d92bd3305d5e3ad6ee28 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2780015 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 572fd801 2021-03-22T16:14:34 Vulkan: Rename Uniforms/XFB descriptor desc. The new name is more consistent with the other names. Refactoring change only. Bug: angleproject:5736 Change-Id: Idc47fef29040e3a422267795c4536163a6f8eb4e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2779953 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tim Van Patten b2e76cf5 2021-03-17T17:43:03 Save/Load missing members There are several class/struct members that are missing when a program is serialized/deserialized. This leads to errors when attempting to link programs that have been deserialized. For example, when drawing with a PPO that contains programs which were created with glProgramBinary(). This CL adds saving/loading the missing members. Bug: b/182409935 Change-Id: I637c6cd8c174acd6da8d51433893323a32e5d7c0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2770683 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Charlie Lao 81432c24 2021-03-19T14:03:02 Vulkan: Rename onImageHelperRelease to finalizeImageLayout Make the API name reflect what it does. With recent changes, this get called from places that are not releasing ImageHelper object, but is try to reference the current layout. This new name makes more sense than onImageHelperRelease (at that time when this API was introduced, it was only called when ImageHelper is being released). Bug: b/175584609 Change-Id: Ie5f5fcdbd97436724d7eb016374d8b4178e7ba1d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2776261 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 02acc5ee 2021-03-18T16:08:59 Vulkan: More cleanups to perf counters. This refactors the pipeline type in the ContextVk class to also use a packed enum map. It also expands the object perf counters to store both a specific and cumulative version for use in different cases. Bug: angleproject:5736 Change-Id: I6ff78e38065eb577f2b95b1d9c4f9cc31d7f325f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2774184 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 7fe44a53 2021-03-20T09:39:09 Vulkan: Don't acquire new BufferHelper for external buffers EXT_external_buffer spec - This extension allows the data store for an immutable buffer to be sourced from an external EGLClientBuffer, allowing sharing of EGL client buffers across APIs, across processes, and across different processing cores such as the GPU, CPU, and DSP. The intent is for a single backing memory to be reused across various processes and processors. Ensure that a glBuffer backed by external memory does not orphan the memory when glBuffer APIs like glBufferSubData or glMapBufferRangeEXT modify the glBuffer. Bug: angleproject:4380 Bug: angleproject:5073 Tests: ExternalBufferTestES31.*DoesNotCauseOrphaning*Vulkan Change-Id: I4e88f80d93ee1ba1208378121412926351d10af8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2776192 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Nicolas Capens 135385a1 2021-03-19T00:09:31 Disable EGL_EXT_buffer_age for SwiftShader Vulkan Cuttlefish with SwANGLE failed to pass the android.graphics.cts. BitmapTest#testDrawingHardwareBitmapNotLeaking test, due to a timeout in dequeueBuffer (error = -110) during an EGL_BUFFER_AGE_EXT surface query. This change conservatively works around the issue by leaving EGL_EXT_buffer_age support disabled for SwiftShader. Further investigation is required to check whether this timeout can also occur with other Vulkan drivers, and if it can be addressed robustly. Bug: b/182521420 Bug: angleproject:3529 Change-Id: I54e3767e74bf922f273d8860f9f4cfc8b6589536 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2774030 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Nicolas Capens <nicolascapens@google.com>
Charlie Lao d5bc8a27 2021-03-17T18:21:35 Vulkan: Add VUID-vkCmdDraw-None-04584 validation error to ignore list Aztec ruins is using the same texture (but different level controlled by a uniform variable) for textureLod and rendering. This triggers vulkan validation error. This CL put it in the ignore list so that it can pass. Bug: b/175584609 Change-Id: I7623e7b448514b3c12268aa5fe154f4c2f59b059 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2770686 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao 867411a4 2021-03-08T19:08:14 Vulkan: Track images used for both attachment and sampler This CL adds a new layout ImageLayout::ColorAttachmentAndShaderRead. We detect that the same ImageHelper object is used for both sampler and attachment and will pick this new layout instead of ColorAttachment. Bug: b/175584609 Change-Id: I2089f59d4dc1ad4de7edab0e067797adcfa9b020 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2749479 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao da437f26 2021-03-08T19:08:14 Vulkan: Defer color image layout changes at endRenderPass time Right now color render target's image's layout change are done at beginRenderPass time. The problem is that the layout also depends on whether texture is also being used as a sampler or not. That information is not known when renderpass starts. We did some special treatment for depth stencil attachment so that its layout determination is deferred until endRenderPass time. This CL expands that same mechanism to color attachment as well. Right now the color attachment will still pick the same ImageLayout::ColorAttachment layout since the logic to detect it is also used for texture sampling is not there yet. Bug: b/175584609 Change-Id: Id7486174d475f894461578b31d0d40fdd90e808a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2744121 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Jamie Madill b717952e 2021-03-18T10:39:34 Vulkan: Use packed enum map for descriptor set index. This simplifies a lot of the data structure indexing in the program executable class. Also renames the "DriverUniforms" and "InternalShader" index into a single "Internal" index. Bug: angleproject:5736 Change-Id: I2a51d8b14d5b16b438dbe636f77b11bbc045ba9a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2773321 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Jamie Madill 1b08cfcb 2021-03-18T10:01:54 Vulkan: Clean up shader buffer DS allocation. We were using repeated code patterns in several places. Bug: angleproject:5736 Change-Id: I206783dd792c3b0f9d38027235445ec600a60d88 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2773320 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Charlie Lao 378b3261 2021-03-08T18:50:53 Vulkan: Move CommandBufferHelper::reset() closer to constructor This is a mechanical change. Similar to constructor, the reset() function is doing initialization of data members. Move them next to each other helps adding a new data members which requires modifications to both functions. Bug: b/175584609 Change-Id: I11386677bc5c9838104025d6a4ecf6f2b58fa92c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2745842 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Jamie Madill 716b2cba 2021-03-12T14:46:53 Use bitset masks for active shader buffers. This switches the tracking for the uniform, shader storage, and atomic counter buffers to use bitset masks to determine where there are active buffers. This will make iterating these buffer sets faster. Also renames the limit for atomic counter buffers to be consistent with the other buffer types. Also applies the implementation limit to atomic counter buffer bindings. This fixes out-of-bounds access on some Linux platforms that expose a large number of bindings. Bug: angleproject:5736 Change-Id: Ice801645697592d1dda6aebf0cb69767594cc0c5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2757509 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Mohan Maiya 81dcf078 2021-03-08T11:21:31 Reland "Vulkan: Support EXT_sRGB_write_control" This is a reland of 6073af536cf627742696823edc82c9b0a481a8bc with 2 changes - 1. Don't enable the extension even in nonConformant mode 2. Don't enable VK_KHR_image_format_list for swiftshader Original change's description: > Vulkan: Support EXT_sRGB_write_control > > Implement support for EXT_sRGB_write_control. This extension > requires VK_KHR_image_format_list to be supported. > > The spec requires this functionality to work with glBlitFramebuffer > as well but support for that will be added in a follow up change. > As such, this extension is only exposed in non-conformant mode. > > Bug: angleproject:5075 > Tests: SRGBFramebufferTest.*Vulkan* > Change-Id: I59b38f6cd810a3d0d67ec29f4f19c25f65f70862 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2617243 > Commit-Queue: Mohan Maiya <m.maiya@samsung.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:5075 Change-Id: I8e149d196a39c3c4769bfa8690792f3c53831299 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2762647 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Shahbaz Youssefi 629f66ce 2021-03-16T00:34:16 Vulkan: Fix missing dirty bits for compute In the following scenario: - Dispatch - Flush outside render pass commands - Dispatch The second dispatch doesn't rebind the pipeline because it assumes it's recording to the same primary command buffer. This assumption is broken if another thread causes a submission before the second dispatch. It's also broken if using Vulkan secondary command buffers. Bug: b/181711029 Change-Id: I5335be95208f41724cf8e9c60ae5322ad91840fd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2763143 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Tim Van Patten bbed8813 2021-03-05T17:40:27 Create GN arg to enable non-conformant features The GN arg angle_expose_non_conformant_extensions_and_versions is being added to control exposeNonConformantExtensionsAndVersions, which enables non-conformant features and extensions. In particular, this is being done to enable EXT_texture_buffer on devices that don't support all of the necessary formats since many Android games rely on this extension, such as "Special Forces Group 2", "Fortnite", and "PUBG". # Enables non-conformant extensions and features angle_expose_non_conformant_extensions_and_versions = false Users/vendors can now toggle the value with a GN arg, rather than a code change, to make it easier to test the conformant version of ANGLE with CTS, dEQP, etc. and/or app-compatibility. Bug: angleproject:5592 Change-Id: Icbf18b48a2751c03e277ae964e1ec278a43324cf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2740643 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Jamie Madill 89d2a96a 2021-03-09T18:37:57 Vulkan: Add test for UBO descriptor allocations. This performance counter test verifies that re-binding the same two buffers repeatedly doesn't allocate new descriptor sets. Currently the test fails because we don't cache descriptor sets for UBOs. Covers equivalent code patterns in Asphalt 9. Reorganizes the perf counters collected for the program objects. Now they are per-frame reset instead of cumulative. This tracking is now consistent for the different counter types. In the future we can add cumulative tracking for all per-object and global perf counters. Bug: angleproject:5736 Change-Id: I23d04b6453e38af1cf4af7274d24382d136efad3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2746176 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jason Macnak 41a2672f 2020-09-03T11:05:54 Vulkan: Use optimal tiling for AHB When running Android on certain GPUs, there are problems creating Vulkan image siblings of AHardwareBuffers because it's currently assumed that the underlying driver can create linear tiling images that have input attachment usage, which isn't supported on NVIDIA for example, resulting in failure to create the image siblings. Yet, we don't currently take advantage of linear elsewhere in ANGLE. To maintain maximum compatibility on Android for such drivers, use optimal tiling for image siblings. Note that while we have switched to optimal unconditionally in this path versus linear, it's possible that previously compatible linear usages might become uncompatible after switching to optimal. However, from what we've seen on NVIDIA/AMD/Intel/Samsung GPUs so far, formats generally have more possible usages in optimal tiling versus linear tiling: http://vulkan.gpuinfo.org/displayreport.php?id=10804#formats_linear http://vulkan.gpuinfo.org/displayreport.php?id=10804#formats_optimal http://vulkan.gpuinfo.org/displayreport.php?id=10807#formats_linear http://vulkan.gpuinfo.org/displayreport.php?id=10807#formats_optimal http://vulkan.gpuinfo.org/displayreport.php?id=10809#formats_linear http://vulkan.gpuinfo.org/displayreport.php?id=10809#formats_optimal http://vulkan.gpuinfo.org/displayreport.php?id=10787#formats_linear http://vulkan.gpuinfo.org/displayreport.php?id=10787#formats_optimal Also, as an aside, in terms of what's generally expected from the Vulkan ICD in Android when determining AHB compatibility, if the vendor wants to declare a particular combinatino of format/tiling/usage/etc as not supported AHB-wise, it's up to the ICD vendor to zero out bits in supportedHandleTypes in the vkGetPhysicalDeviceImageFormatProperties2 query: ``` * [VUID-VkImageCreateInfo-pNext-00990](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-VkImageCreateInfo-pNext-00990) If the pNext chain includes a VkExternalMemoryImageCreateInfo structure, its handleTypes member must only contain bits that are also in VkExternalImageFormatProperties::externalMemoryProperties.compatibleHandleTypes, as returned by vkGetPhysicalDeviceImageFormatProperties2 with format, imageType, tiling, usage, and flags equal to those in this structure, and with a VkPhysicalDeviceExternalImageFormatInfo structure included in the pNext chain, with a handleType equal to any one of the handle types specified in VkExternalMemoryImageCreateInfo::handleTypes ``` Bug: angleproject:5709 Change-Id: I67b65ab830505a9df4665ccea8e2ba1ca409e0b5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2729243 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lingfeng Yang <lfy@google.com>
Alexey Knyazev b7fc9518 2021-03-08T03:55:36 Do not expose emulated ETC1 textures to WebGL Add a new "emulatedEtc1" limitation. Bug: chromium:1048244 Change-Id: Ia04746773db3ad75781a8adfda988d36bd2c57f7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2718865 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Ian Elliott 92db3c68 2021-03-10T15:09:15 Vulkan: Disable rotating damage rectangles on Android This fixes visual problems with Android games that use eglSwapBuffersWithDamageKHR(). In 90/270-degree cases, the damage rectangles are being double-rotated, leaving them 90-degrees out of alignment with the window. On Android, VK_KHR_incremental_present is built on top of the same platform code as eglSwapBuffersWithDamageKHR(). The platform code rotates all damage rectangles (assuming they are application-provided). Therefore, ANGLE should not also pre-rotate damage rectangles. Test: Black Desert Mobile Test: Grand Theft Auto: San Andreas Test: Extreme Car Driving Simulator Bug: b/181796746 Change-Id: I6510e7540bb00afc75863e8ae8a9ea3841d1641d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2744984 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Mohan Maiya 331640e5 2021-03-09T14:36:19 Vulkan: Pass in the correct size to acquireBufferHelper When BufferVk::acquireAndUpdate calls into acquireBufferHelper to allocate a new buffer helper we were passing in the update size instead of the full buffer size. Modified acquireAndUpdate's parameter to better reflect intent. Bug: angleproject:5689 Change-Id: Ic4fbc015651491ec028d747da5d45670264b93fa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2746066 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Shahbaz Youssefi 920cb58b 2021-03-09T23:02:40 Vulkan: Fix MemoryBarrier function name typos Bug: angleproject:5070 Change-Id: Ic0c3de4380d02d150e2f52690ded9dfcc07b4575 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2747854 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi c7c38731 2021-03-04T15:04:07 Vulkan: Move SpirvBlob definition to common/ For use by the translator. Bug: angleproject:4889 Change-Id: Ie95cafd3cfcdde50acc5d26d3c00e6574186a805 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2737276 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 8844599f 2020-09-11T22:41:36 Vulkan: Create unresolve shader directly in SPIR-V Per issue 4889, dependency to glslang is being dropped. This change generates the unresolve UtilsVk shader directly in SPIR-V. This shader is trivial and contains repeating patterns per attachment. As a result, generating its SPIR-V is exceptionally simple. The SPIR-V in this change is first generated by glslang validator and is then adapted for autogeneration. See comments in the code for details. Bug: angleproject:4889 Change-Id: I48dd77ae04e1035c05a8aef7bf2f161e105ae2a4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2407179 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Mohan Maiya c054008f 2021-03-06T13:33:11 Vulkan: Check buffer usage before unmapping Buffers with dynamic usage will have frequent CPU updates. Don't CPU unmap such buffers after every update. Commits b5af8bde13 and 58c35d421 took care of performing an unmap when we release the buffer either to the renderer or mBufferFreeList. Bug: angleproject:5689 Change-Id: Ib6b8f6a7d0cb36583140e67bf164e074af098b8b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2741688 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Ian Elliott d52cf01a 2021-03-05T16:20:53 Work-around eglSwapBuffersWithDamageKHR() bug During startup of the the "Black Desert Mobile" application, there is a time when it shows white on the right-half of the screen, while the left-half of the screen updates. This appears to be a HWC (compositor) bug related to eglSwapBuffersWithDamageKHR() being used with a full-screen damage area. Test: Black Desert Mobile Test: Grand Theft Auto: San Andreas Bug: b/182213414 Bug: b/181796746 Change-Id: I3d85425e92f654d10b75637c91002812131c2154 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2739999 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Peng Huang b27740f3 2021-03-09T16:15:15 Revert "Vulkan: Support EXT_sRGB_write_control" This reverts commit 6073af536cf627742696823edc82c9b0a481a8bc. Reason for revert: crbug.com/1186140 Original change's description: > Vulkan: Support EXT_sRGB_write_control > > Implement support for EXT_sRGB_write_control. This extension > requires VK_KHR_image_format_list to be supported. > > The spec requires this functionality to work with glBlitFramebuffer > as well but support for that will be added in a follow up change. > As such, this extension is only exposed in non-conformant mode. > > Bug: angleproject:5075 > Tests: SRGBFramebufferTest.*Vulkan* > Change-Id: I59b38f6cd810a3d0d67ec29f4f19c25f65f70862 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2617243 > Commit-Queue: Mohan Maiya <m.maiya@samsung.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:5075,chromium:1186140 Change-Id: Ib0d4d60fe7434fb950f99db2c210aab9af7d2d0e No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2743663 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Peng Huang <penghuang@chromium.org>
Mohan Maiya 6073af53 2021-03-08T11:21:31 Vulkan: Support EXT_sRGB_write_control Implement support for EXT_sRGB_write_control. This extension requires VK_KHR_image_format_list to be supported. The spec requires this functionality to work with glBlitFramebuffer as well but support for that will be added in a follow up change. As such, this extension is only exposed in non-conformant mode. Bug: angleproject:5075 Tests: SRGBFramebufferTest.*Vulkan* Change-Id: I59b38f6cd810a3d0d67ec29f4f19c25f65f70862 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2617243 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amy Liu 0ee360de 2021-03-05T06:02:25 Revert "Compression of the data from vkGetPipelineCacheData." This reverts commit cc5083e071e9e0663979c02376e7848c7de11765. Reason for revert: Re-land this patch after fixing the performance regression of big blob cache (discussed in angle issue 4722). Original change's description: > Compression of the data from vkGetPipelineCacheData. > > The size of pipelineCacheData sometimes is greater than > 64k which cannot be saved because of the Android blob cache > limitation (single cache data size should be < 64k). > Implement the compression to store more cache data. > > Bug: angleproject:4722 > Change-Id: I435b086d70d0e6378f1141464ae2bafbe076f193 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2631511 > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Geoff Lang <geofflang@chromium.org> Bug: angleproject:4722 Change-Id: Ie4de10eabf5cd8f0b4748e2c1a4c3ab6b8ea092c No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2739098 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi e366e2c3 2021-02-27T01:00:02 Vulkan: Keep dynamic buffer's free list trimmed ContextVk's staging buffer never gets a chance to free its free buffer list. During application load time, a large amount of memory may be allocated from this buffer to stage texture updates and they would remain throughout the life of the application. This change ensures that the free buffer list doesn't grow unbounded. In the Manhattan trace, this saves >1GB of memory on Linux. There are now three policies for vk::DynamicBuffer: - Always reuse buffers: This is useful for dynamic buffers that make frequent small allocations, such as default uniforms, driver uniforms, default vertex attributes and UBO updates. - Never reuse buffers: This is for situations where the buffer is unlikely to be used after some initial usage, such as texture data upload or vertex format emulation (as the conversion result is cached, so it's never redone). - Limited reuse of buffers: For the staging buffer in the context which is shared by all immutable texture data uploads, it's useful to keep a limited number of buffers (1 in this change) to support future texture streaming while allowing a large number of buffers allocated in a burst to be discarded. Bug: angleproject:5690 Change-Id: Ic39ce61e6beb3165dbce4b668e1d3984a2b35986 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2725499 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 58c35d42 2021-03-02T09:00:55 Vulkan: Unmap buffer when adding to mBufferFreeList The commit b5af8bde13 moved the unmap call on a buffer to when it is placed in mBufferFreeList. There was one place that was missed, rectifying that oversight here. Bug: angleproject:5689 Change-Id: Iaed2916de374d55ab59276e2679c23ed7ef9c4e8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2733476 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jason Macnak 60ad763d 2021-03-01T15:29:51 Vulkan: Enable EGL_ANDROID_recordable for EGL configs on SwiftShader There does not seem to be a way to query the Gralloc and Vulkan drivers for recordable support so keep this as a narrow hack restricted to SwiftShader. Bug: b/181163023 Test: `cts -m CtsMediaTestCases` on Cuttlefish w/ SwANGLE Change-Id: I0bfee01d43ea8e3d9965f5bfaa578a285d37db29 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2727874 Commit-Queue: Jason Macnak <natsu@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi 2f737c25 2021-02-25T16:55:14 Translator: Rename GLSL to SPIR-V in Vulkan and Metal output Preparation for actual SPIR-V output instead of GLSL. Bug: angleproject:4889 Change-Id: Ic279b23d3a817bd5dca66a844905378207afdbac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2721194 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi 0224e848 2021-03-03T14:31:07 Vulkan: Fix overlay graph widgets Bug: angleproject:5690 Change-Id: I9a63fd91c7403f8bf1ee6ef25fc636aecfbe6ea0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2732533 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 49211c31 2021-03-02T11:22:28 Vulkan: Fix Overlay for prerotation Bug: angleproject:5690 Change-Id: I906a259767c54e3ac9f3ac822b6d5ed5dcaa0bd5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2725768 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Shahbaz Youssefi 90db6049 2021-03-02T13:02:07 Vulkan: Workaround Overlay draw issue on Android On Android vector[n] translates to vector[0] likely due to a driver bug. This resulted in text such as: 12345678abcdefghijklmnopqrstuvwx to render as: 1234123412341234ijklijklijklijkl It also made graph data flicker. As a workaround, the shader now does an if-else on the value of n and uses a constant to load the appropriate component of the vector. Bug: angleproject:5690 Change-Id: Idb891e726fafa896a1064ef7b2941b8fd1c41ed1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2725769 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Stephen White d8557cc8 2021-03-03T10:17:46 Fix for readPixels() to PBO fast path. Include the "pixels" (data) pointer as offset. Bug: angleproject:5702 Change-Id: Idc9f3ee4c0dbb1cc9308393bbf877d6137598486 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2732789 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Stephen White <senorblanco@chromium.org>
Shahbaz Youssefi 07025aa3 2021-03-02T00:28:32 Overlay: Widget for vk::DynamicBuffer allocations Bug: angleproject:5690 Change-Id: Idfa591903627bbebffe306b387e95cbec1195338 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2725767 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jeff Vigil 22fc9523 2021-02-03T15:32:48 EGL: implement EGL_EXT_buffer_age Add extension flag. Add Validation check to surface query. Enable extension for vulkan. Modify AcquireNextImage to ++frame count and tag images with frame number. Buffer age is the difference between current frame count and the tagged frame number on the buffer. getBuffeAge may need to trigger AcquireNextImage to be current. Pass through egl extension and query. Add EGLBufferAgeTest Test: angle_end2end_test --gtest_filter=EGLBufferAgeTest Test: angle_deqp_egl_tests --deqp-case=dEQP-EGL.functional.buffer_age.* Bug: angleproject:3529 Change-Id: I0cb94be1c3e85d6f33e82a6a1ccdc9731b6a7f23 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2684724 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jonah Ryan-Davis 6edba641 2021-03-02T11:36:59 VK: Suppress VUID-vkCmdBindDescriptorSets-pDescriptorSets-01979 This validation is blocking the vulkan-deps roll. Suppressing until we fix the issue. Bug: chromium:1183542 Change-Id: I05ca95af8bcf77ddb70f01049e5cb07967420c25 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2727645 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Ian Elliott 6af0c03f 2021-02-25T18:15:21 Vulkan: Always write to swapchain alpha channel This fixes an issue with the "Ragnarok M: Eternal Love" game, which uses a GL_RGB8 format for its window, which is actually backed by a GL_RGBA8 format (a.k.a. "emulated alpha"). The game does no explicit clear per frame. Therefore, ANGLE selects a render pass loadOp=DONT_CARE, which leaves the alpha channel undefined (0.0 on a Pixel 4 XL). That causes SurfaceFlinger to show (blend or alternate vsyncs) what should have been covered up by the game (e.g. the Android launcher and live wallpaper). The solution is to prevent loadOp=DONT_CARE for emulated alpha. Test: ClearTest.ChangeFramebufferAttachmentFromRGBAtoRGB Test: dEQP-GLES2.functional.fbo.render.stencil_clear.tex2d_rgb_stencil_index8 Bug: b/180139027 Change-Id: Ied97b57c93d41326cb3294ff246691e09f316791 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2704949 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Shahbaz Youssefi da4aa8b8 2021-02-25T16:26:53 Vulkan: Move SPIR-V validation function to common/ For future use by the translator. Bug: angleproject:4889 Change-Id: I051ad48e6edb58ce3055c5fd276c18a6e29a66ac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2717020 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 67333608 2021-02-25T14:15:33 Vulkan: Check texture type before calling into feedbackloop check In ContextVk::updateActiveTextures we end up calling this method shouldSwitchToReadOnlyDepthFeedbackLoopMode(...) for every active texture. Since color textures are more numerous than depth, check the texture type beforehand to decrease function stack depth. This removes 0.5% CPU overhead from a Manhattan30 offscreen run Bug: angleproject:5689 Change-Id: I14758b031e58b269392b4f450a5bb1ba8edabb44 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2723493 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Mohan Maiya b5af8bde 2021-02-24T09:47:43 Vulkan: No need to unmap buffer when adding to mInFlightBuffers When we move a BufferHelper to the mInFlightBuffers list don't try to unmap it there, instead do that when it gets added to mBufferFreeList This removes 0.75% CPU overhead from a Manhattan30 offscreen run Bug: angleproject:5689 Change-Id: I01a52cdf4803fb8364140b01bedbd3d0e6cc61fd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2723492 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 77637f2d 2021-02-19T15:18:52 Vulkan: Generate xfb support code in SPIR-V for emulation path This change moves the code generation at link time from source code to SPIR-V. As a result, transform feedback extension and emulation paths are more similarly handled before SPIR-V transformation (they both store information identically in the ShaderInterfaceVariableInfoMap). This change gets rid of the @@ XFB-OUT @@ marker. With no source code generation at link time, shader compilation can be moved to glCompileShader time. Bug: angleproject:4888 Change-Id: I8cdb89c22b57ce48cf5d226b8e41622d9d550d46 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2713269 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Lubosz Sarnecki 46a955f8 2021-02-25T16:06:05 gen_vk_internal_shaders: Don't include full path on Python 3.4+. Since Python 3.4 `__file__` represents an absolute file path: https://docs.python.org/3.4/whatsnew/3.4.html#other-language-changes We only want the basename in the generated scripts. Bug: angleproject:5516 Change-Id: Ia4009419ef627aa1ce12f9a944539c054edc3a6b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2720260 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 550f2a3e 2021-02-24T09:49:42 Vulkan: Shader support for EXT_shader_framebuffer_fetch_non_coherent Translator can accept gl_LastFragData and 'inout' variable to gain access to framebuffer attachment data. The Vulkan translator replaces it with the SubpassInput type variable. Note that this works only for the noncoherent version of the extension. Bug: angleproject:5454 Test: *EXTShaderFramebufferFetchNoncoherent*.* Change-Id: I392f84ee3ad3eb9fbd09d0b7ff83731a9a3f33f6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2598060 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Shahbaz Youssefi 3013f27c 2021-02-23T22:37:42 Vulkan: Fix missing visibility barrier for glReadPixels glReadPixels uses a temporary buffer for readback and was missing an onBufferTransferWrite() call. Bug: angleproject:5669 Change-Id: I3c6daba176e332711fa1ab51e279526717486dd0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2717005 Reviewed-by: Jie A Chen <jie.a.chen@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 4a24786e 2021-02-23T23:32:48 Vulkan: Fix PBO read pixels with unaligned output pitch Vulkan takes the output pitch in texels instead of bytes in VkBufferImageCopy::bufferRowLength. This means that it's impossible to use vkCmdCopyImageToBuffer when the pitch is not a multiple of texel size. This change makes sure the fallback path is taken. Bug: angleproject:5667 Change-Id: I3f2ef312bb8288de8ca3c6730d85a3c14858812e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2717006 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 999da35e 2021-02-18T17:29:20 Vulkan: Optimize glMemoryBarrier more The implementation assumed that the X_BARRIER_BIT bits implied two barriers; write->X and X->write. However, they only imply write->X, with the exception of SHADER_IMAGE_ACCESS_BARRIER_BIT and SHADER_STORAGE_BARRIER_BIT which handle X->write for images and buffers respectively. As a result, the other bits no longer set the MEMORY_BARRIER dirty bit as they don't guard against X->write usage. Bug: angleproject:5070 Change-Id: Id23904c455a5f56dc45fc6832a74fdfbba6a4827 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2705702 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 39d7fc18 2021-02-17T00:18:41 Vulkan: Don't break the render pass on dispatch calls The only reason a dispatch call may need to break the render pass implicitly is for read-after-writes where the write originates from the render pass but is not through a storage buffer/image. There are only two such scenrios possible: - Framebuffer attachment write -> texture sample - Transform feedback write -> ubo read All other uses of the buffers and textures that require breaking the render pass are handled by `glMemoryBarrier`. Bug: angleproject:5070 Change-Id: I92b50d69d8782097ee8ff477ac57da6209c326a1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2698998 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Lubosz Sarnecki 37752956 2021-02-11T16:12:48 Generators: Use fixed year in license headers. Remove dynamic year generation from generator scripts, as required by the Chromium C++ style guide. The dynamic year values were replaced by the current year at the time the file was created according to git log. The code to dynamically generate the year was removed. This patch also refreshes generated files and hashes. Bug: angleproject:5516 Change-Id: I735028bccb5c83217e92c380538f1abf0a906b2c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2690950 Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 6e8cdd39 2021-02-17T00:17:17 Vulkan: Don't break the render pass on indirect calls The render pass is now only broken if the indirect buffer was used as transform feedback. Any other write to the indirect buffer is synchronized with `glMemoryBarrier`. Bug: angleproject:5070 Change-Id: I67868ae9a8f08e1ab186440a3cbdc7439c66808e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2698996 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi e96d1744 2021-02-12T14:14:02 Vulkan: Optimize glMemoryBarrier Previous to this change, glMemoryBarrier was processed as it is issued. This made it impossible to know whether a draw call would follow or a dispatch call, and what resources it would use. The render pass was conservatively broken due to this limitation. To address this limitation, handling of glMemoryBarrier is deferred until the next draw or dispatch call. Note that glMemoryBarrier acts as two barriers: - An execution+memory barrier: shader writes are made visible to subsequent accesses - Another execution barrier: shader accesses are finished before subsequent writes An important observation is that for most resources, ANGLE actually necessarily has to issue memory barriers automatically to conform with Vulkan. In terms of memory barrier thus, ANGLE already does the right thing except for when there's no binding change. This means WaW hazards (i.e. storage buffer and image writes) with no binding change require a memory barrier as a result of glMemoryBarrier. In all other cases, it's enough for glMemoryBarrier to break the render pass if necessary and ensure that corresponding bindings are marked dirty (for the execution or memory barriers to happen automatically later). Bug: angleproject:5070 Change-Id: Ide359c43362f8a78805ecf797a91de7aa79221f9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2693473 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 6af603e1 2021-02-19T11:56:34 Vulkan: Secondary sort shader enums by name. This preserves the primary sort by bits. If bits are equal we then sort by name to produce a more stable sort. Bug: angleproject:5653 Change-Id: I4cdbc21094fcbd1bb7ad17e124074949bdbf0439 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2704825 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 4afd0f27 2021-02-17T13:35:57 Vulkan: Add VK_KHR_image_format_list support to initExternal The code for initializing a VkImage with VK_KHR_image_format_list extension support is now internal to initExternal. Also provides a flag to inform callers when VK_KHR_image_format_list support is enabled. Bug: angleproject:5520 Change-Id: Ie2ade93d1403ab3f9cbcf7d80684bbca201d5d8d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2702159 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Tim Van Patten bd276beb 2021-02-12T10:58:43 Vulkan: Don't wait on unflushed sync objects without a Context The app "Car Parking Multiplayer" issues a ClientWaitSync() command without having already flushed the sync object and without an active context. We should return TIMEOUT immediately rather than attempting to wait on the sync object, since we can't flush it and it'll never be signalled. Bug: angleproject:5613 Bug: angleproject:5656 Test: MultithreadingTest.NoFlushNoContextReturnsTimeout Change-Id: Ieaf675ca9144f9c851c73b9ca399daaf4ed1cd0f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2693375 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Jamie Madill 7e990ef4 2021-02-16T18:15:43 Clean ups to generate_entry_points. Switches to Python 3 support. Made a change to run_code_generation to support this. Affects several generators. Also updates the generator to make a few other small cleanups. Bug: angleproject:5653 Change-Id: I045173c9ca85947c4eac22285701032c09f4c8d0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2699187 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 7ae8531b 2021-02-17T15:20:07 Vulkan: Fix crash with 0-sized element buffer VertexArray::syncState syncs all dirty bits, including DIRTY_BIT_ELEMENT_ARRAY_BUFFER even for draw calls that don't use this buffer, such as glDrawArrays. If the element buffer is given 0 size, this caused a crash in the Vulkan backend. Bug: chromium:1172577 Change-Id: I02d78c9660c07b896f7403867b648901478251fe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2701831 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 907a3cee 2021-02-17T08:07:45 Vulkan: Add support for EXT_shader_framebuffer_fetch_non_coherent EXT_shader_framebuffer_fetch_non_coherent is implemented using subpass input attachments. The extension will be enabled in a follow up change that adds required changes to the Vulkan translator. Bug: angleproject:5454 Test: FramebufferFetchNonCoherentES31.*Vulkan Change-Id: Ic73c66a476c4a21db5269431166a198841f1dc0c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2598059 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tim Van Patten 64b5b3d3 2021-02-12T17:31:58 Vulkan: Further restrict enabling LINE_RASTERIZATION_MODE_BRESENHAM The app "Car Parking Multiplayer" enables GL_SAMPLE_ALPHA_TO_COVERAGE, which leads to a VVL error when LINE_RASTERIZATION_MODE_BRESENHAM is also enabled: VUID-VkGraphicsPipelineCreateInfo-lineRasterizationMode-02766: The Vulkan spec states: If the lineRasterizationMode member of a VkPipelineRasterizationLineStateCreateInfoEXT structure included in the pNext chain of pRasterizationState is VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT and if rasterization is enabled, then the alphaToCoverageEnable, alphaToOneEnable, and sampleShadingEnable members of pMultisampleState must all be VK_FALSE. This CL adds the additional checking to GraphicsPipelineDesc::initializePipeline() to ensure those conditions are met before setting lineRasterizationMode to VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT. Bug: angleproject:5613 Test: StateChangeTest.AlphaToCoverageEnable Change-Id: Ie2286078f6916c01a19ae6f932321a86619bd4e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2694094 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi 3c28b2a0 2021-02-10T16:49:32 Vulkan: Remove render pass check from setupDraw() ... and move it to handleDirtyGraphicsRenderPass. Bug: angleproject:5528 Change-Id: I416b2fedb1cd924d04fa739aecb65193fd845f6b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2686441 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>