src/libANGLE


Log

Author Commit Date CI Message
Shahbaz Youssefi 6c41793f 2022-12-20T15:20:50 Vulkan: Use read/write depth/stencil layouts This allows an application to have depth in read-only feedback loop while stencil is being written to for example. Bug: angleproject:7899 Bug: b/192477489 Change-Id: Ic2e11d32da7c7e3a7f3cd86dbafc5c56a0dbbfd7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4116730 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 067ace47 2022-12-21T00:00:00 Add ANGLE_clip_cull_distance extension Added an extension spec. Trivially exposed it on GL, Vulkan, and D3D11. Adjusted tests and validation to allow no cull distance support for this extension string. Removed extra built-in variable definitions. Bug: angleproject:7904 Change-Id: Ic60772dfe28132c316eaa29aadc1afd66e3b0fa7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4114290 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Charlie Lao 295f6830 2022-12-21T10:56:03 Vulkan: bufferRead should accommodate deferred endRenderPass ContextVk::onSyncObjectInit() will request end of current renderPass but deferred (in this case, mRenderPassCommandBuffer is nullptr but mRenderPassCommands->started() still returns true). The next draw call will actually end current renderPass and starts a new renderPass. But if next call is glCopyBufferSubData, it will not actually trigger endRenderPass. This CL modifies OutsideRenderPassCommandBufferHelper::bufferRead logic to accommodate this deferred endRenderPass scenario by checking mRenderPassCommands->started() instead of hasStartedRenderPass so that the answer to "if this buffer been used by current renderPass or not" will return correct result. Bug: angleproject:7903 Change-Id: Ie5c9977ccf083e7d355a2cd8fd08e9077049ee9a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4119692 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 216cd10b 2022-12-22T11:29:35 Vulkan: Dsiable enableAsyncPipelineCacheCompression There was intermittent failure on bots due to this. Re-disable it for now. Bug: b/246683126 Change-Id: Iba5c0bcacb87336d187b952b47804885ce569f6d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4120245 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Mohan Maiya cc34aa73 2022-12-19T14:03:27 Move BinaryStream to common and expose ShaderState to compiler This is a refactor change in preparation for adding support for glShaderBinary. Move BinaryStream to common so that it is accessible by both libANGLE and the Compiler. Extract members that hold the result of compilation from ShaderState and move into new CompiledShaderState struct. Move helper functions & classes relevant to ShaderVar serialization to the CompiledShaderState header. Tests: EGLBlobCacheTest* Bug: angleproject:7833 Change-Id: I7ec575247eccb3afbc6ab6bfa24d36e69d4576f5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4080998 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi 626b10c1 2022-12-20T20:22:19 Vulkan: Add read/write depth/stencil layouts This CL only adds the layouts in the list, but does not use them. The layouts are renamed for consistency in this change. Bug: angleproject:7899 Bug: b/192477489 Change-Id: I47986c7252d32626e9f26c6670c0a4e3496fe0c8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4116736 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 301ed545 2022-12-20T20:16:22 Vulkan: Pass context to layout getters In preparation for a change that optionally uses read/write depth/stencil layouts. Context is used to test for the supportsMixedReadWriteDepthStencilLayouts feature to know whether those layouts are supported or that a fallback must be chosen. Bug: angleproject:7899 Bug: b/192477489 Change-Id: I1453dc9d060453a3806ad0f261b94368fe01fb29 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4116735 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao d6dea33b 2022-12-19T13:39:34 Vulkan: Remove CommandQueue::mGarbageQueue With recent work of per active context queue serial, mGarbageQueue behaves almost identical to normal mSharedGarbage now. This CL removed mGarbageQueue and added garbage into Remove mSharedGarbage instead. Bug: b/263166501 Change-Id: I6bce47b4535283e7bd0f0c8823b9629cc25f9d94 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4117712 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Yuly Novikov 1e32988c 2022-12-21T15:53:15 Revert "Metal: expose Metal backend only on supported GPUs." This reverts commit 9364246f08d34a378252e517210b68e97282f764. Reason for revert: iOS build fails Original change's description: > Metal: expose Metal backend only on supported GPUs. > > Query all the GPUs on the system during ANGLE's initialization, and do > not expose the EGL_ANGLE_platform_angle_metal client extension unless > all of them support the required GPU families or feature sets. > > Tested locally on a 2015 MacBook Pro with dual Intel Iris Pro and AMD > Radeon R9 M370X GPUs. The AMD GPU supports Metal GPU family macOS 2, > but the Intel GPU, only family macOS 1. With this change, Chrome > properly falls back to using ANGLE's OpenGL backend when > --use-angle=metal is specified, and renders correctly. > > Bug: chromium:1365598 > Change-Id: I2c3533afe733e0d06d7755cae272bbd12aa9e676 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4117716 > Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> > Reviewed-by: Gregg Tavares <gman@chromium.org> > Commit-Queue: Kenneth Russell <kbr@chromium.org> Bug: chromium:1365598 Change-Id: Iedbe8978f2a2d39a33359fa236a1d305c284266e No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4114291 Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Choi Sungyong 9ded03b4 2022-12-20T07:09:36 Revert "Vulkan: Make available GLInternalFormatToGbmFourCCFormat" This reverts commit 402e7f7a634b1170d0feae52a44168731a7489f9. Reason for revert: Chromium android-binary-size build failed. Original change's description: > Vulkan: Make available GLInternalFormatToGbmFourCCFormat > > GLInternalFormatToGbmFourCCFormat() is not available on Linux > because of the guard with the wrong definition, ANGLE_USES_GBM. > This also fixes build errors that were occurred after enabling. > > Bug: angleproject:7829 > Change-Id: If7c7543270cc127945149927be0fc3ffdd49163b > Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4022963 > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Jeff Vigil <j.vigil@samsung.com> > Commit-Queue: mohan maiya <m.maiya@samsung.com> > Reviewed-by: mohan maiya <m.maiya@samsung.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:7901 Bug: angleproject:7829 Change-Id: I256d51f78ff0d3ced9920c3ea1d2bfceba43a1ee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4113577 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Kenneth Russell 9364246f 2022-12-19T16:28:44 Metal: expose Metal backend only on supported GPUs. Query all the GPUs on the system during ANGLE's initialization, and do not expose the EGL_ANGLE_platform_angle_metal client extension unless all of them support the required GPU families or feature sets. Tested locally on a 2015 MacBook Pro with dual Intel Iris Pro and AMD Radeon R9 M370X GPUs. The AMD GPU supports Metal GPU family macOS 2, but the Intel GPU, only family macOS 1. With this change, Chrome properly falls back to using ANGLE's OpenGL backend when --use-angle=metal is specified, and renders correctly. Bug: chromium:1365598 Change-Id: I2c3533afe733e0d06d7755cae272bbd12aa9e676 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4117716 Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Gregg Tavares <gman@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Alexey Knyazev 91a5635a 2022-12-16T00:00:00 Support arbitrary clip and cull distance array sizes Removed limitSimultaneousClipAndCullDistanceUsage cap. Enhanced HLSL translator to support all valid combinations of clip and cull distances. Validate that these arrays are sized explicitly or by using only constant indices; adjusted link program error message. Enhanced tests to cover all possible combinations of implicit and explicit array sizes for both built-ins. Bug: angleproject:4452 Change-Id: I704db6dc3c8951e5ba482a3e4dad09e5b0182f9c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4111645 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 28e7adca 2022-12-09T00:00:00 GL: Implement clip distance state emulation Pass the current set of enabled clip distances to vertex shaders via an internal uniform and dynamically set disabled elements to zero. Bug: angleproject:7880 Change-Id: I709d31dc7ca0606decf49adf674460a941837683 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4094314 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi b7ec9d03 2022-12-19T12:53:16 Vulkan: Create RenderPass2 by default Previously, ANGLE created core Vulkan 1.0 render passes by default and converted them to render pass 2 objects if necessary. However: - More and more extensions used by ANGLE require this functionality, - Upcoming use of VK_KHR_separate_depth_stencil_layouts makes this path almost always taken. It's time for ANGLE to default to render pass 2 objects instead, especially as support for it is becoming practically ubiquitous. Bug: angleproject:7899 Bug: b/192477489 Change-Id: I6970a017040a2fdc001d4f2e53c1a0d5968a37cb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4116675 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi b227cf2f 2022-12-19T12:43:37 Make pending memory allocation type atomic * This is to prevent TSAN failures due to data race in setPendingMemoryAlloc(). Bug: b/262029018 Change-Id: I5f2f13ecbe762102692bb910a5baa5b25fa42abe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4115479 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi abcbd54c 2022-12-19T14:38:49 GLES1: Optimize texcoord varyings Use vec3 instead of vec4. Either 2 or 3 components are used based on 2D or cube map textures. On hardware that can pack the varyings, this can reduce pressure on varyings. Additionally, this is a minor optimization to texture coord calculation (when !draw_texture) as one row of the 4x4 matrix multiplication doesn't need calculation. Bug: angleproject:6644 Change-Id: I2abac511a0ced575c089dfb3a3b506f51a111a54 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4116676 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 91d6c3e6 2022-12-05T17:12:49 GLES1: Reduce pressure on vertex input / varyings Typically, not all texture units are used. This change ensures no vertex input / varying is consumed when fewer than maximum textures are used. Bug: angleproject:6644 Change-Id: Iea0e35dc12ec4fcb342818786f307286bf7fc5bb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4081116 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi cd540095 2022-12-12T13:13:14 Vulkan: Add memory log at allocation error * Added logging memory allocation information in handleError() in the event of an error from ANGLE_VK_TRY. * Used for the handleError() in ContextVk. * Updated the name and message of the function to log allocations. * checkForCurrentMemoryAllocations() * Added logging memory heap stats, including budget and usage. * logMemoryHeapStats() * In the renderer, added the feature flag indicating whether the platform supports the memory budget extension. * Uses VK_EXT_memory_budget. * Added the enum class MemoryLogSeverity, which is used to select the severity level of the memory log. * Added logging pending memory allocation information. * logPendingMemoryAllocation() * If the last unsuccessful memory allocation was unsuccessful, its information will be added to the log. Bug: b/262029018 Change-Id: I97343c1553936aed23d763f3e0c00d495f9ee810 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4089531 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Kaiyi Li <kaiyili@google.com>
Mohan Maiya 6769ef2b 2022-12-16T15:34:21 Vulkan: Bug fix in setupIndexedDraw Reset ContextVk::mCurrentIndexBufferOffset to 0 after a call to ContextVk::convertIndexBufferCPU(...) irrespective of whether the buffer binding is dirty. Bug: angleproject:7896 Test: DrawElementsTest.DrawElementsWithDifferentIndexBufferOffsets* Change-Id: I70a63b7e432aaa9f8c647e56bd162312143abd65 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4113446 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi ea36cf1c 2022-12-19T09:55:45 Vulkan: Feature for VK_EXT_rasterization_order_attachment_access This change just adds the feature. A follow up change will actually start using the extension. Bug: angleproject:7899 Bug: b/192477489 Change-Id: I19c078ebe57a7819b3aa3e95d4436cefa34ba85b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4113912 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 5c8c0347 2022-12-15T15:46:38 Vulkan: Remove ContextVk::retainResource and retainImage() Clean up some retain* APIs. retainImge and retainReadOnlyResource and retainResource are doing exact same thing, they are consolidated into just retainResource. ContextVk::retainResource is removed since mUse can now safely copied from DescriptorSetHelperPool object which tracks mUse. Bug: b/262047600 Change-Id: I56ea08696e870826bd94ccb79dd621f35923bc6a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4114500 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 1a8bcbda 2022-12-17T20:12:41 Vulkan: Re-enable async pipeline cache sync by default This is a reland of c7414946b84410bfcc8705759a902577c13d9fc4 The change here is that the program, shader and blob caches are now reset _after_ the backend is torn down. Otherwise the pipeline cache sync thread's use of the caches races with that. Bug: b/246683126 Change-Id: Ifc3d67279de50a2ee2866476aa5df85d4c10d30d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4111972 Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 376d309c 2022-12-15T09:43:00 Vulkan: Remove unnecessary usesBuffer() check There are places that we call setQueueSerial after usesBuffer() check. This was useful when we had the ResourceList where it is more expensive to set serial. But now setQueueSerial is cheap (actually is cheaper than usesBuffer check), so there is no need to do this check any more. This CL removes the check to further reduce the CPU overhead. Because of this, mUsedBufferCount will not be accurate, so this CL also removes the tracking of mUsedBufferCount (was only for informational purpose anyway). This CL also removes commandBufferQueueSerial.valid() check in Resource::usedByCommandBuffer() and turns it into assertion. Some places in contextVk will ensure we only call it on started renderpass so that other places that calls usedByCommandBuffer will not need to eat the if check. Bug: b/262047600 Change-Id: I6b8004b6aa5b567fa94c0eb56801054f818838b1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4112145 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Gregg Tavares be9e8e7b 2022-12-14T14:13:39 Add EGL_ANGLE_wait_until_work_scheduled extension We're changing eglReleaseTexImage so it calls flushCommandBuffer(mtl::NoWait) instead of flushCommandBuffer(mtl::WaitUntilScheduled) and then adding an extension to allow us to WaitUntilScheduled. This is because Chrome calls eglReleaseTexImage for every canvas and having it WaitUntilScheduled per call is very slow. So instead we'll call eglWaitUntilWorkScheduledANGLE once which will effectively wait just once. Bug: angleproject:7890 Change-Id: I87bc9f9a1a7f4a0f99d93736cc3083799e76afeb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4109311 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Charlie Lao c4765732 2022-12-16T18:07:18 Revert "D3D: Remove ResourceSerial" This reverts commit 214742be91b89087dd26acbae09a070a91730ecc. Reason for revert: Regression https://bugs.chromium.org/p/chromium/issues/detail?id=1401503 Original change's description: > D3D: Remove ResourceSerial > > The only difference between ResourceSerial and UniqueueSerial (formerly > Serial) appears to be ResourceSerial is wrapper of object pointer. This > CL removes ResourceSerial class and switched it to UniqueSerial class > instead. (We may need to see why it needs to use pointer to initialize > the serial, that sounds like the exact thing serial try to avoid.) > > Bug: b/262047600 > Change-Id: Ic8e1b26d7da9304ff02fd9a7e1b584bb70efcb77 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4102107 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/262047600 Change-Id: I757451a487839db17390dde18f1e2bc5eda36d37 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4114273 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Yuxin Hu 25ce2e23 2022-12-16T18:16:32 Revert "Make ANGLE program version only dependent on data that matters" This reverts commit c303758fbc8d23266be578fae246e5687656b4c6. Reason for revert: This is causing the Android roller fail: https://crrev.com/c/4072215/comments/6918d7f6_8100d66b?tab=comments Original change's description: > Make ANGLE program version only dependent on data that matters > > This change introduces a new variable ANGLE_PROGRAM_VERSION > to track the version of ANGLE source files that affect shader > program serialization/deserialization. This change include more > source files than necessary, to serve the purpose of a conservative > jumping off point. We will narrow down the list of files for > ANGLE_PROGRAM_VERSION hash generation in the future. > > Add a new script program_serialize_data_version.py that will > be triggered during the build when the related source files changed. > The script will generate a hash and the hash size from the related > source files. In program serialization/deserialization and cache > key generation, we will use this hash value instead of the entire > ANGLE git hash. When the hash value changed, we know that the > related source files changed, and we should invalidate the program > cache and re-generate the blob cache / program binary. > > Bug: angleproject:4981 > Change-Id: I2fb609416738d459d3289190c232c2d797ba58e3 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4072215 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Cody Northrop <cnorthrop@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Commit-Queue: Yuxin Hu <yuxinhu@google.com> Bug: angleproject:4981 Change-Id: Ib235d85c79ed54110696ac5413571934890fdc98 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4114274 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Sungyong Choi 402e7f7a 2022-11-11T15:51:55 Vulkan: Make available GLInternalFormatToGbmFourCCFormat GLInternalFormatToGbmFourCCFormat() is not available on Linux because of the guard with the wrong definition, ANGLE_USES_GBM. This also fixes build errors that were occurred after enabling. Bug: angleproject:7829 Change-Id: If7c7543270cc127945149927be0fc3ffdd49163b Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4022963 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jeff Vigil <j.vigil@samsung.com> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu c303758f 2022-12-14T15:29:15 Make ANGLE program version only dependent on data that matters This change introduces a new variable ANGLE_PROGRAM_VERSION to track the version of ANGLE source files that affect shader program serialization/deserialization. This change include more source files than necessary, to serve the purpose of a conservative jumping off point. We will narrow down the list of files for ANGLE_PROGRAM_VERSION hash generation in the future. Add a new script program_serialize_data_version.py that will be triggered during the build when the related source files changed. The script will generate a hash and the hash size from the related source files. In program serialization/deserialization and cache key generation, we will use this hash value instead of the entire ANGLE git hash. When the hash value changed, we know that the related source files changed, and we should invalidate the program cache and re-generate the blob cache / program binary. Bug: angleproject:4981 Change-Id: I2fb609416738d459d3289190c232c2d797ba58e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4072215 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Charlie Lao cd367796 2022-12-12T15:10:09 Vulkan: Add assert to ensure never setQueueSerial backwards This CL add an assertion in ResourceUse::SetQueueSerial to ensure that we never set a serial smaller than what it already has. If that happens, we could potentially destroy it while GPU still accessing it. With this assertion, it exposed a bug that when a buffer is read accessed by a renderpassCommands and then read accessed by outsideRenderPassCommands, we were incorrectly setting the queueSerial with outsideRP's serial, overwriting the queueSerial already set by renderPassCommands. To fix this, this CL detects this case and keeps the queueSerial set by renderPassCommands. Bug: b/262047600 Change-Id: I51b17ab4a93bccd0d0b079784af96cef9d79f16f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4099804 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Cody Northrop 7fe33996 2022-12-02T00:04:28 Capture/Replay: Regen/Restore shaders and programs Add missing functionality that can recreate shaders and programs that are deleted during the run. Test: Plants vs. Zombies Heroes MEC Bug: angleproject:5968 Bug: angleproject:7848 Change-Id: I2d41ebe9df1e2ad1beef831acd72fd3f06f4eb1f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4060241 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao a703eea4 2022-12-09T15:55:03 Vulkan: Remove Serial::valid() check QueueSerial right now checks if serial is valid or not in various comparison. This CL removes valid() method from class Serial and rely on the fact that default constructor always constructs kZeroSerial and kZeroSerial is always smaller than any serial, i.e, always appears as flushed, submitted and completed. This removes one branch from critical code path where we try to detect if a buffer/image is used by a renderpass or not etc. Bug: b/262047600 Change-Id: Ic76fe1409d9911dc7eb86107c9a930d8bb5eaa05 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4089848 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 412dd368 2022-10-05T23:51:52 Vulkan: Use vkCmdClearAttachments for unmasked scissored clears Building on work by Tim Van Patten <timvp@google.com> In https://chromium-review.googlesource.com/c/angle/angle/+/3388635, not only were unmasked scissored clears made to use vkCmdClearAttachments, but also scissored clears could use loadOp=Clear. While this is potentially faster, it comes with a number of complications. This change only does the former. Unfortunately, due to a Qualcomm driver bug that forces ANGLE to avoid vkCmdClearAttachments, code simplification in the draw path cannot be made. Bug: angleproject:5194 Change-Id: Iec4184a09ca7fd09e3e8148c53db503512e6b8f0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3935893 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi c3209b13 2022-12-13T16:05:51 Vulkan: Remove GlslangWrapperVk This class was just forwarding functions, and had over time become too thin. Bug: angleproject:7220 Change-Id: I7ae84ba017478d5c36b1e6d5f98a52d6b1cffb66 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4103744 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 40c17b58 2022-12-13T15:35:23 Vulkan: Move SPIR-V transform to vulkan/ No longer used by metal/. Bug: angleproject:7220 Change-Id: Idb3a6369fefbcf87e7993daa652c8702ec53c20f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4104002 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 77c95de4 2022-11-16T21:12:28 Vulkan: Threaded monolithic pipeline creation With this change, once a pipeline is created out of libraries, a task is scheduled (if necessary) to asynchronously create a corresponding monolithic pipeline. Once the task is complete, the linked pipeline handle is replaced by the monolithic one, gaining back any performance that might have been lost due to the use of libraries. Bug: angleproject:7369 Change-Id: I525fb1e09f8bedc61b9dbef19f9cce7026ff9c53 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4031151 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 2072aea9 2022-12-13T15:23:49 Metal: Remove references to GLSLANG Bug: angleproject:7220 Change-Id: Ifae4dc427e34cdd3ec17b8f897c7dec59c779633 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4104001 Reviewed-by: Gregg Tavares <gman@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 69d9f077 2022-12-13T15:10:36 Metal: Remove references to ShaderInterfaceVariableInfoMap Bug: angleproject:7220 Change-Id: Ib78daa77779258aa450067d891c6af4ee4877446 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4104000 Reviewed-by: Gregg Tavares <gman@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 214742be 2022-12-13T10:43:52 D3D: Remove ResourceSerial The only difference between ResourceSerial and UniqueueSerial (formerly Serial) appears to be ResourceSerial is wrapper of object pointer. This CL removes ResourceSerial class and switched it to UniqueSerial class instead. (We may need to see why it needs to use pointer to initialize the serial, that sounds like the exact thing serial try to avoid.) Bug: b/262047600 Change-Id: Ic8e1b26d7da9304ff02fd9a7e1b584bb70efcb77 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4102107 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao b19d17b8 2022-12-09T14:38:08 Vulkan: Split Serial class into UniqueSerial and Serial This CL splits Serial class into two classes: UniqueSerial and Serial. UniqueSerial supports the object unique serial usage where there is == and != operator but no > or < comparison. UniqueSerial can have invalid value, but Serial will not have invalid value (in next CL). The main reason is for next CL we can further optimize out the invalid value check in the QueueSerial comparison. Bug: b/262047600 Change-Id: Ieaed2a0d5546b012a6d63aa18b6006595e4aee1b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4093557 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 22d73114 2022-12-13T09:53:34 Vulkan: Remove unnecessary pipeline library retain Vertex input and fragment output partial pipelines are kept alive until context destruction, so there's no need to retain them. Bug: angleproject:7369 Change-Id: I8cbe5b9f70845bb5d9348f11889f64a6a94a6b87 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4100407 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Ivan Murashov 816505f9 2022-12-13T12:35:50 GCC: Make some operators of QueueSerial non constexpr Fix build breakage for GCC because of calling non constexpr function from a constexpr function. The error example: third_party/angle/src/libANGLE/renderer/serial_utils.h:214:40: error: call to non-'constexpr' function 'rx::Serial rx::AtomicQueueSerialFixedArray::operator[](rx::SerialIndex) const' Bug: chromium:819294 Change-Id: Ic09be54ce9418ab3f7d947eaa27c97b55c3c2bab Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4098527 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 89cd8583 2022-12-12T11:23:59 Vulkan: Clean up Resource class Resource::retainCommands() API name no longer make sense. This CL removes retainCommands and retainReadOnly and retainReadWrite APIs and replaced with setQueueSerial and setWriteQueueSerial call directly. This CL also merges some of single inline functions to minimize the file, sine the class is small anyway. Bug: b/262048658 Change-Id: I9d16b82c79b27f3285311393601705a4ee7f6d8a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4098005 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi a1be7188 2022-12-12T16:11:34 Vulkan: Keep referenced pipeline libraries alive As required by the spec, it's not enough to keep the linked pipeline alive. With this change, the serials of the invidual libraries are updated every time the serial of a linked pipeline is updated. Bug: angleproject:7369 Change-Id: Iedc98a427d988d00b4e8745964d9827fdf51ea7f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4098744 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao f3ebb2ca 2022-12-08T17:02:12 Vulkan: Better mUse tracking for DynamicallyGrowingPool<Pool> This is used only from DynamicallyGrowingPool<Pool>::onEntryFreed to set the its tracking QueueSerial. There is better way to do this now with per context serial. We can simply merge the QueryHelper's mUse into the pool instead of setting pool's use to the current queueSerial. The benefit of doing that is to possibly allow pool gets reuse/freed earlier (i.e., more accurate tracking). This CL switches it to more accurate tracking and removes mCurrentSerial from Context. This CL also removes unused DynamicSemaphorePool class. Bug: b/262054987 Change-Id: Iac3e2495cc0e3623ba63e9da7f32ad6e9c223467 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4089847 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Amirali Abdolrashidi 684ff60b 2022-06-21T10:52:31 Vulkan: Add shared ring buffer cmd alloc feature * Added RingBufferAllocator.cpp with implementation. * Main classes: * RingBufferAllocator (fast allocation with bulk deallocation) * SharedRingBufferAllocator (wrapper to help with shared use and multiple threads) * Implemented "angle_enable_vulkan_shared_ring_buffer_cmd_alloc" feature. (Disabled by default) * Details (from the original CL) * The angle::PoolAllocator replaced with angle::RingBufferAllocator. * Before, there was separate angle::PoolAllocator per each CommandBufferHelper. Now, a single angle::RingBufferAllocator is shared between multiple CommandBufferHelper objects. * Commands data from multiple CommandBufferHelpers is tightly packed without fragmentation. * Significantly less memory overhead, observed with enabled async queue. * Moved the parts of the code related to the allocators into the classes in the new AllocatorHelperPool and AllocatorHelperRing files for better management. The allocator can be switched by changing the following BUILD flag: `angle_enable_vulkan_shared_ring_buffer_cmd_alloc` * It is connected to the following macro: ANGLE_ENABLE_VULKAN_SHARED_RING_BUFFER_CMD_ALLOC * The two main allocator classes in each file are aliased as: * SecondaryCommandBlockAllocator (in CommandBufferHelper objects) * SecondaryCommandBlockPool (in SecondaryCommandBuffer) * Also added placeholder functions for VulkanSecondaryCommandBuffer. * Added descriptions regarding the two allocators. * renderer/vulkan/doc/Allocators.md Credit: Original CL authored by Igor Nazarov <i.nazarov@samsung.com> Bug: angleproject:6401 Bug: b/256666069 Change-Id: I0f24793eef6334bf4ff8e327b9665338807dad37 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3715968 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao f8980c98 2022-12-08T11:51:42 Vulkan: Make ReadWriteResource subclass from Resource To simplify the code slightly. The main reason for this is that the two class variables of ReadWriteResource totally does not make sense: mReadOnlyUse actually manes any usage, read or write. mReadWriteUse actually means write usage. Since Resource class's mUse means any access, subclass ReadWriteResource from Resource class makes more sense since mUse means exact same thing in both classes. This CL also changes ReadQriteResource::mReadWriteUse to mWriteUse. Bug: b/262048658 Change-Id: I0e3172a70b8cb6a6481045c46690b69fbfe9523c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4089983 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 6830b7d3 2022-11-23T11:51:28 Vulkan: Use finishQueueSerial for queueSubmitOneOff Right now for oneoff submission we are creating a fence and pass in the fence and then wait for fence outside the normal wait code path. This creates a problem that the command buffer and garbage clean up code does not gets run and may end up hitting assertion. This might be necessary before because complication with ResourceList. With recent work that removes ResourceList, this can be much simpler now. This CL removes the fence creation and wait in the oneoff submission code path (except the external fence) and switch to finishQueueSerial call. Bug: b/255414841 Change-Id: I2b16c187becbda9c2397685c7212abac994e8dc2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4053261 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 1219f55a 2022-12-07T16:19:37 Vulkan: Remove Resource::isCurrentlyInUse Due to header file include order, this function can not directly made inline. This CL removes the function and replace it with renderer->getUnfinishedUse() to reduce one extra function call of one line function. Bug: b/262048658 Change-Id: Ied33b63d0ec88336a5ce42cf7726f16b2b883b86 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4089623 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 798b97b8 2022-12-07T15:37:51 Vulkan: mapRangeImpl should call flushImpl if unflushed write BufferVk::mapRangeImpl() want to ensure any GPU write command has been flushed and finished. Right now it calls flushImpl if there is any unflushed access. It should only need to flush if there is any unflushed *write* command. This CL changes check of any access to any write access. This CL also inlines isCurrentlyInUseForWrite/finishGPUWriteCommands and removed these two single line function calls. Bug: b/261772793 Change-Id: I1628ec31eaceb87f82e654cb1f317570ff2f6c12 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4086972 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 702018d2 2022-12-08T13:29:24 Vulkan: Make PipelineHelper go through normal collectGarbage Right now there are two different type of garbages. Objects like buffer or VkImage that can be used by different contexts and are GPU tracked as they are been used. These objects goes to RendererVk::mSharedGarbage. The one time use objects or objects are not been tracked as they are been accessed, they add to the context's garbage list and their mUse gets updated when commands gets submitted. With new per active context queue serial, the update of mUse can be immediate and low cost ( write to an entry in the array), so there really isn't a good need to keep two garbage list. This CL only deals with PipelineHelper object that makes it goes through general collectGarbage code path instead of ContextVk::mCurrentGarabge, since the PipelineHelper object is already mUse tracked properly. Bug: angleproject:7862 Change-Id: Ie77229683828590546f06938add057cf5610835b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4089984 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 55670895 2022-12-08T10:50:27 Vulkan: Move desc set updates cache to share group This ensures that if one context batches updates to a descriptor set, that other contexts in other threads are able to flush them if necessary. This is necessary as descriptor sets are themselves shared between contexts. Bug: b/261552549 Bug: angleproject:7881 Change-Id: Id1a895b05fe31d118e8fb3fa64e5ccd67cff7923 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4088904 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
Shahbaz Youssefi fd75686e 2022-12-07T16:40:54 Vulkan: Fix EGL image queue change vs threads ANGLE records commands (a queue transfer and layout transition) when an external image is bound to a texture or a renderbuffer. If another thread starts using these resources, the recorded commands should have been flushed. The application is not required to synchronize between the threads in this case (or at least, there are applications that don't). Bug: b/261552549 Change-Id: I9f345316269baf5f10576dbef73b86924efd5c6f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4088903 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Alexey Knyazev 0103213e 2022-12-05T00:00:00 GL: Support clip and cull distance redeclarations * Fixed gl_PerVertex qualifier string. * Updated ValidateClipCullDistanceTraverser to output redeclared array sizes and maximum constant indices. * Made DeclarePerVertexBlocks available for non-Vulkan outputs. * Updated DeclarePerVertexBlocks to remove gl_ClipDistance and gl_CullDistance redeclarations. * Enabled DeclarePerVertexBlocks for ESSL output when gl_ClipDistance or gl_CullDistance are redeclared. * Updated ESSL output to use 3.10 shading language version, when the context has GL_EXT_clip_cull_distance enabled. * Updated ESSL output to enable GL_EXT_shader_io_blocks when gl_ClipDistance or gl_CullDistance are redeclared. * Updated extension exposure conditions. * Fixed typos in ParseContext. Bug: angleproject:7763 Change-Id: Ib87368a1953ad546a407d634d8b00f71cf92c40c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4083705 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao f4e64938 2022-12-07T13:01:15 Vulkan: Remove CommandQueue::mQueueSerialMutex This mutex lock is no longer used and needed, thus removed in this CL. Also removed unused BufferAccess enum class. Bug: b/261737134 Change-Id: I7391e84c5b2abcd87de6ce9e66ba85f81ff7dce3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4086934 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi db9ffea3 2022-12-08T22:08:51 Vulkan: Remove the unused shadowBuffer feature Bug: angleproject:4339 Change-Id: I4f4524ba597af25bd6da3792bd7a85ae1b52962e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4089448 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 02cc4cd5 2022-12-07T12:03:26 Vulkan: Remove ImageHelper::mImageAndViewGarbage This was introduced in crrev.com/c/3449450. At that time this is necessary, because we can not copy mUse for immediate view garbage collection. Now with recent work, mUse is copyable, we no longer need to accumulate the view garbage. They can be released immediately with a copy of image's mUse. Bug: b/261737134 Change-Id: Ic4393f8c4ee7c0e3be4669a0a557507c909a77ab Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4087323 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Chris Dalton eb1a13d8 2022-12-06T21:56:42 Improve PLS load and store op tokens Define more new tokens that are more clearly named, as opposed to recycling tokens that were meant for a different purpose. Bug: angleproject:7279 Change-Id: I840e5ea168235c49eec2693b2231c2d329027b0e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4082057 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Gert Wollny f7cf3226 2022-12-08T10:08:56 Capture/Replay: Only create active secondary contexts in MEC This finalized the fix attempted in b432c84c2b8cb6d20873e2b33b6684bee76db90d Capture/Replay: Fix collecting the initialized contexts Bug: angleproject:7858 Change-Id: Ie2bbcdb3f23fe4970ce3a9bb46df6f60fe6c8ab6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4084926 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Shahbaz Youssefi 1193b664 2022-10-11T01:00:40 Vulkan: Use VK_EXT_pipeline_protected_access This extension allows pipelines to be restricted to protected or unprotected command buffers only. Bug: angleproject:7714 Change-Id: Id07be4c2ffd7ca19b8b4a2a869828bc11e89e467 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3943535 Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 7e378da9 2022-12-01T16:36:08 Vulkan: Remove synchronous commands from CommandProcessor Some command tokens in CommandProcessor are doing synchronous calls. For example, finishResourceUse() and waitIdle(). They are inserting a token and then wait for CommandProcessor to drain. This CL removes these commands from CommandProcessor and it just ask CommandProcessor to drain and then call into mCommandQueue to finishResourceUse or waitIdle. This is a minor clean up for now, but in future CL we will also avoid waitForWorkComplete if the mUse has already been drained from CommandProcessor. Bug: b/261098465 Change-Id: I7672a9c0b1e477ea3537652cd83350aa97f7caa7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4072223 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao fa45eae4 2022-12-07T10:39:31 Vulkan: Remove QueryVk::hasUnsubmittedUse() QueryVk has a list stashed query helpers and current queryHelper. The mStashedQueryHelpers are always older than mQueryHelper. When we want to check if all queryHelpers has been submitted or not, we really only need to check the last one, which is mQueryHelper. There is no need to check mStashedQueryhelper. This CL turns that check against mStashedQueryhelper into an assertion inside finishRunningCommands. Bug: b/261737134 Change-Id: I2369e6690c46bcd338d4bfcb679a77478d3fdb84 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4087321 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Yuly Novikov 81a3c71e 2022-12-01T18:51:39 Enable tests on Win Intel Optiplex 7080 experimental bot Suppress failing end2end tests and run single process Suppress VUID-VkDescriptorImageInfo-imageView-06711 Bug: chromium:1349828, angleproject:7874 Bug: angleproject:7865, angleproject:7866, angleproject:7872 Change-Id: I18c9099af6635cf41f5368960dc1d35d9decc48c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4071925 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Chris Dalton f551faf7 2022-12-01T17:14:14 Use typed UAV loads for pixel local storage, when supported D3D11.3 supports typed UAV/ROV loads on some hardware. Check for this feature and use it when available. I haven't been able to measure a meaningful performance difference from this change, presumably because the bottleneck is memory bandwidth, but it's simple and more consistent with the other backends. Bug: angleproject:7855 Change-Id: I1713fc12842380ef1a685a6878948bc0293074c5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4072222 Commit-Queue: Chris Dalton <chris@rive.app> Reviewed-by: Stephen White <senorblanco@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Charlie Lao ca263d4a 2022-11-23T12:11:49 Vulkan: Remove UsedInRunningCommands The only difference of UsedInRunningCommands() and hasUnfinishedUse() is the latter excludes the case where it has not submitted yet. But all usages are already checked if it has been submitted or not. This CL removes UsedInRunningCommands and uses hasUnfinishedUse instead. Bug: b/255414841 Change-Id: I94ef0b63a0c888219cffcdfcecfa0a095fee616b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4053262 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Gert Wollny 384ce5cf 2022-11-29T14:18:34 Capture/Replay: Corretly reset the UnpackAlignment at end of MEC Direcly setting the value doesn't set the relevant dirty state, use the appropriate setter call instead. This fixes the reported difference between the UnpackAlignment value stored in the trace and the one recorded ruring validation for MEC. Bug: angleproject:7564 Bug: angleproject:7180 Change-Id: Ic931cac9b7e33519e992ae55ee5cab2adb2958ca Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4063892 Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi 982755e0 2022-12-05T15:32:42 Suppress VUID-vkCmdDraw-None-06887 * Suppressed the following VVLs: * VUID-vkCmdDraw-None-06887 * VUID-vkCmdDrawIndexed-None-06887 Bug: angleproject:7861 Change-Id: I15cdf934bd87b5d5219e69eebc9d339d4c180660 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4082149 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 3b57c2a8 2022-12-05T15:33:43 Add cmnt for VUID-vkDestroySemaphore suppression Bug: angleproject:7729 Change-Id: I46d8afe9702b9263a776e9acfa9a3364b7184579 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4080592 Reviewed-by: Ian Elliott <ianelliott@google.com> Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Charlie Lao 2d87551d 2022-12-05T10:47:40 Vulkan: Make mLargestAllocatedIndex atomic TSAN is complaining mLargestAllocatedIndex not thread safe. This CL makes it atomic and make it mean " the largest queue index we have ever allocated/seen" so that it will be thread safe. It is impossible to use a queueIndex before it been allocated. But it is still possible that some mUse still referencing a queueIndex after it is been released. The only downside is that we may get into slightly less optimal code path for GetBatchCountUpToSerials if we ever get into more than 64 queueIndex and then get bellow 64 again, but that should not a real concern. Bug: angleproject:7860 Change-Id: I4c99bae24e9d72298253e43f8d108444a8f46ebc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4080590 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi bd79968a 2022-12-02T14:17:14 Vulkan: Make sure program's pipeline cache is created The condition to create or use the program's pipeline cache has become quite complicated. This change simplifies things by making sure the pipeline cache is created if and when it's used, instead of guessing how it will be used and pre-create it. Bug: angleproject:7369 Change-Id: I7f3558e55f391da8c701e359d2f88d248c820de4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4076508 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 8181c056 2022-11-22T15:34:48 Vulkan: Remove RenderPassSerial RenderPassSerial was introduced to uniquely identify a RenderPassCommands. With the work of per current context queue serial, now every started RenderPassCommands already have a unique QueueSerial. This CL removes RenderPassSerial and use renderPass's queueSerial instead. Bug: b/255414841 Change-Id: Id0a87319a9132cdb74aba195f1f05aa31454592b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4049966 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Alexey Knyazev 87815de2 2022-12-01T00:00:00 Adjust GetFramebufferAttachmentParameterivBase validation GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT state queries should be allowed for ES 2.0 clients when floating-point color buffer extensions are enabled. Bug: angleproject:7853 Change-Id: I4a0a3b336e44648635233be54f598a3ab20cf717 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4071926 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 3fedd435 2022-12-05T10:15:22 Overlay: Switch font to RobotoMono Which has an Apache 2.0 license Bug: b/260423572 Change-Id: Ibc4b664ddfe844be08ccbac57c27e81951940490 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4079268 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 650f2274 2022-12-02T15:51:09 Vulkan: Remove fixed VVL errors Bug: angleproject:7338 Change-Id: I4d2b05c5fd5ad505fda2089dbfa2119e8db8ac16 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4076515 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Cody Northrop 0790a807 2022-12-01T23:58:36 Capture/Replay: Add ResourcesToDelete For resources that are deleted but not recreated by the app, we need to skip the delete call we've been making for ResourcesToRegen. To support this, track which resources need to be deleted. We've gotten by without this for so long because most apps will immediately recreate a resource after deleting it. When they simply delete starting resources, we can't try to delete them again. Test: MEC of multiple apps Bug: angleproject:4599 Change-Id: I226ba7887e2b7b31d4ce9a75d6a8d0a24f3f32ac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4075486 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi 58d7ace2 2022-11-22T16:08:07 Vulkan: Add memory allocation log support in debug * Added a memory tracker to the renderer object to keep track of the memory allocations and deallocations in more detail. * This feature is used for debugging only. * To enable it, set angle_enable_memory_alloc_logging=true in GN args (added in renderer/vulkan/BUILD). * It is related to ANGLE_ENABLE_MEMORY_ALLOC_LOGGING in the code. * The tracker are updated in the memory allocation tracking functions if the feature is enabled. (The counter is always updated, even if the feature is disabled.) * At the end of a RendererVk object, it checks for and logs any remaining allocated memory from MemoryAllocationType members. * The data is stored in the map object "mMemoryAllocationTracker". The key used for it is currently of type angle::BacktraceInfo. * If angle_enable_unwind_backtrace_support is disabled, or not on Android, the key is an empty object. * MemoryAllocInfoMapKey is used as a key to access the allocation information. Bug: b/242641395 Change-Id: If701a4bdea2f8738a830ee47e0c7c5cdacf95b87 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4050103 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 66a7117a 2022-11-30T10:34:30 GLES1: Use less precision for color and tex coords Per the GLES1 spec, color and tex coords are satisified by half-precision floats. Bug: angleproject:6644 Change-Id: Ia3f8e45d4c35557a25373f9ad572e87708bc2001 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4067803 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Charlie Lao 2e5ca217 2022-11-18T10:44:49 Vulkan: Let each current context has its own QueueSerial. This CL makes every current context has its own queueSerial. At context creation time or when context becomes current, it allocates a QueueIndex from renderer. When it becomes non-current, it releases QueueIndex for others to reuse. This way we significantly reduces the max number of QueueIndexs for reasonable usage. Each CommandBuffer has its own unique QueueSerial and we use that to determine if a resource is being used by the given CommandBuffer. The QueueSerial for RenderPassCommands is deferred until renderPass starts, and when we generate queueSerial for renderPassCommands, we also reserve a range of serials for outsideRenderPassCommands so that we can do incremental submission of outsideRenderPassCommands without need to close renderPassCommands. In rare situation, if that reserved serials runs out, we also close renderPassCommands to ensure the ordering of serials matches ordering of command buffers. With per current context queue serial, this CL is able to set resource queue serial as it is being used. This CL completely removes usage of ResourceUseList class since it was introduced due to deferred setSerial. This CL also get rid of refCount from ResourceUse since there we no longer add it to a ResourceUseList. With that, we also able to remove SharedResourceUse class since access to ResourceUse itself is now thread safe since we are able to make a copy of it when we add it to GarbageList. Because RenderPassCommands now has its own unique QueueSerial as it encodes command, we can use it to detect if a resource is being used by it or not, thus this CL also removes usage of CommandBufferID. Bug: b/255414841 Change-Id: I36dcbeaa7bc996f04e6c04bf9ad44cd0d630f61a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4038096 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi db557905 2022-12-02T11:32:10 Vulkan: Fix -Wbitfield-enum-conversion Bug: chromium:701384 Change-Id: I8c729934365c035a682e81467679fb7149864aac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4076505 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill aaee3c23 2022-11-30T14:24:13 Build and test ANGLE with Vulkan secondary CBs. This will allow us to run tests with both permutations of ANGLE (custom secondaries & Vulkan secondaries) in the same build directory. It will also allow us to run these configs as tests on our infra. This CL adds a few simple test to CI. Bug: angleproject:6811 Change-Id: I053f8cc5bafc2a7ab7d0665da9301f0ba7f8417f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4067806 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Gert Wollny b432c84c 2022-12-01T10:40:03 Capture/Replay: Fix collecting the initialized contexts The main context initialization function will be emitted as "Shared" and not based on the context number, so only add the secondary contexts to the list of contexts that need additional setup. Fixes: b301b82235ca686d036a8d29380da22bb2060060 Capture/Replay: emit context setup for pre-MEC contexts only Bug: angleproject:7805 Change-Id: I4ac770a303ac93a448c9b46bf8c4cd58900ddd54 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4068124 Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Solti Ho 7e1ed5f1 2022-12-02T02:32:40 Revert "Vulkan: Enable async pipeline cache sync by default" This reverts commit c7414946b84410bfcc8705759a902577c13d9fc4. Reason for revert: b/260752276 Original change's description: > Vulkan: Enable async pipeline cache sync by default > > Bug: b/246683126 > Change-Id: I593650364250f8802e9f546ab9957cf1c30e596a > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4031487 > Reviewed-by: Cody Northrop <cnorthrop@google.com> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/246683126 Bug: b/260752276 Change-Id: I0ebac7e46e213790ac39e4124e89feda76551011 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4074765 Commit-Queue: Solti Ho <solti@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya eafdf206 2022-12-01T12:33:11 Reset thread context during threadCleanup Once thread cleanup is complete reset its mContext member to nullptr. Running CTS tests in batches sometimes exposes a bug where Thread::mContext is accessed after Display::threadCleanup is complete. Bug: angleproject:6723 Bug: angleproject:6798 Change-Id: Ie252954e60b5d4565697095939fd19d002dfccf3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4072208 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Chris Dalton 9bd9c1c2 2022-11-03T11:49:33 Workaround for AMD [[raster_order_group()]] bug Metal [[raster_order_group()]] does not work for read_write textures on AMD when the render pass doesn't have a color attachment on slot 0. To work around this we attach one of the PLS textures to GL_COLOR_ATTACHMENT0, if there isn't one already. Bug: angleproject:7792 Bug: angleproject:7803 Bug: angleproject:7818 Change-Id: I7567ed28ed30c7e3ca23dc52778ed90f2fdff965 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4004529 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Chris Dalton <chris@rive.app> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Nicolas Capens 938f4372 2022-11-30T15:30:23 Move trace_event into anglebase This originates from Chromium's base/trace_event/ so it doesn't need to be under a third-party folder. Bug: b/260093525 Change-Id: Iab7a40569b6c1f91454f099c07bf51e3ce4b65df Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4068342 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Nicolas Capens c991eb22 2022-12-01T14:05:07 Move the anglebase folder up a level This code originates from Chromium's base/ directory so it doesn't have to be under a third-party folder. Bug: b/260093525 Change-Id: I0bf6950095c685f36c5c237093980a64cf6e74f0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4068339 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Nicolas Capens <nicolascapens@google.com>
Chris Dalton 8ee1b89f 2022-11-04T13:10:37 Refactor pixel local storage options The various different PLS options were getting scattered and unruly. We are also in need of more backend-specific PLS options that would be difficult to add as-is. This CL refactors them into a single "ShPixelLocalStorageOptions" struct that gets initialized all in one place, and shared between the compiler and the backends. Bug: angleproject:7279 Change-Id: Ic58dccb8d1ba350a0b6cc5848ce15bd687e30fad Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4006715 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app>
Chris Dalton a4db9477 2022-10-06T10:35:39 Implement pixel local storage with metal::read_write textures Metal's programmable blending feature isn't available on non-Apple Silicon, so on these devices we have to polyfill pixel local storage using read_write textures, which can also be coherent if raster_order_groups are supported. This change leverages the existing PLS transformation to images, and implements just enough shader image functionality in Metal to support the pixel local storage usecase. Missing shader image features are marked with UNIMPLEMENTED(). Bug: angleproject:7279 Bug: angleproject:7792 Bug: angleproject:7794 Bug: angleproject:7797 Bug: angleproject:7803 Change-Id: Ia96a714693d352d57351a1bae4f45437dde000e4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3993363 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app> Reviewed-by: Kyle Piddington <kpiddington@apple.com>
Shahbaz Youssefi fa37af38 2022-07-12T22:47:22 Translator: Support SSO's built-in redeclaration EXT_separate_shader_objects requires that gl_Position and gl_PointSize be redeclared in the vertex shader. This is not adopted by GLES3.2, but is nevertheless required to be supported if the shader enables this extension explicitly. Bug: angleproject:6590 Change-Id: I3428851ff9f00fb63573e4322bb62fe04bf0a095 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3757918 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 2ecb3217 2022-11-28T15:24:39 Vulkan: Turn CPU throttling into fail safe CPU throttling is moved back to after queue present instead of before. Doing it before was a mistake, as the app had already recorded the command buffers, there was no point in delaying its submission. Proper throttling would have been moving the wait from after recording commands (before present of frame i+2) to before recording (after present of frame i+1). However, throttling is the responsibility of the app and this change triggers throttling one frame later (after present of frame i+2) as a fail safe. Currently, CPU throttling is relied upon for acquire semaphore recycling. If the two are untangled, CPU throttling can be removed. CPU throttling can also be trivially weakened by increasing kSwapHistorySize (currently 2). Bug: angleproject:7268 Change-Id: Ib7a8be6f8e72c6b8589d4e8b5de7ceaf6a28bb8e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4060454 Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 31c40936 2022-11-25T12:28:27 Vulkan: Rework present semaphore recycling Present semaphores and old swapchains are now associated with a fence for clean up. The fence is the one coming from the _next_ acquire of the same image index. See doc/PresentSemaphores.md for more details. Bug: angleproject:7847 Change-Id: I16891ccf6df7ac39d8b17328aac35afc422eede0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4058286 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 90b4541c 2022-11-28T11:39:24 Vulkan: Pass signal semaphore by value to async thread Otherwise the signal semaphore is pointing to whatever was passed in from the main thread. Currently, this is ok because: - For external semaphores, ensureNoPendingWork is called - For surfaces, there's a fixed buffer of semaphores However, an upcoming change passes a semaphore specified on the stack, and the thread should not be referencing it. Bug: angleproject:7847 Change-Id: I9a823214bde59b9d7ff23313694c1749a76e6b8e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4060453 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 7f4caaf5 2022-11-23T15:40:53 Vulkan: Fix VulkanPerformanceCounterTest.SubmittingOutsideCom VulkanPerformanceCounterTest.SubmittingOutsideCommandBufferDoesNotCollectRenderPassGarbage depends on the implementation detail on how we flush and submit commands. The recent change crrev.com/c/4038095 fixes one issue that we are now having one less submission on pixel 6 device. This CL adjust the test to account for that. This CL also changed to set mHasDeferredFlush to true only when there is a started renderpass upon FBO bind. This CL also opt in swiftshader into preferSubmitAtFBOBoundary feature for test coverage and ease of debugging since ARM GPU (which enables this flag) is not been tested on CI. Bug: b/255414841 Change-Id: I295cec33a8ca257a5d5a98604b8c4c0c29e97cdf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4054101 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Yuxin Hu 1434697f 2022-11-23T14:47:38 Add a vk feature flag to only enable precision match fixer on IMG According to https://gitlab.khronos.org/vulkan/vulkan/-/merge_requests/5273, RelaxedPrecision does not need to match in the interface matching rules. However, removing the precision match is causing triangle clipping issues on IMG hardware. This change adds a feature flag to only run the code path that applies precision match in SpirV if the hardware is IMG. This is a follow-up change to https://crrev.com/c/4049421. Instead of adding back the code path that handles varying precision mismatch for every hardware, only enabling the code path if the vendor is IMG. Test: On Pixel6: $ adb shell setprop debug.angle.feature_overrides_enabled varyingsRequireMatchingPrecisionInSpirv $ out/AndroidDebug/angle_end2end_tests --gtest_filter="GLSLTest_ES3.MismatchPrecision*" --verbose Bug: angleproject:7488 Change-Id: Ia0155f14d523195df2f47b852ed6642918270e2a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4054100 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jason Macnak 2de99d47 2022-11-17T12:19:35 Reset instance/device extensions in RendererVk::onDestroy() RendererVk::initialize() adds a nullptr to the end of RendererVk::mEnabledInstanceExtensions (presumably to ensure the VK implementation crashes if it tries to read past?). If RendererVk::onDestroy() fails to clear this nullptr, it can lead to a crash when sorting the extension lists when the renderer is re-initialized the second time. Bug: b/249457381 Test: cvd start --gpu_mode=guest_swiftshader Test: EGLDisplayTest.InitalizeTerminateInitalize/ES3_Vulkan_NoFixture Change-Id: Ib24af11024cad6b28284f3a75cc862c48abec258 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4035646 Commit-Queue: Jason Macnak <natsu@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Gert Wollny b301b822 2022-11-07T09:37:14 Capture/Replay: emit context setup for pre-MEC contexts only When a context is made current for the first time it is added to the shared context set. If this happens after the mid execution capture has started, then the call to the context setup function is created, but the according function implementations was not emitted leading to compilation failure of the so created trace. Since a context that was never current doesn't actually have any setup that needs to be done when starting a MEC replay. Hence, there is no need to emit the calls fot SetupReplayContextXX. So track which context where actually in the shared context set when MEC started, and only emit the according calls to the setup functions. Bug: angleproject:7805 Change-Id: I83f8714733ead5c0d71560013c360b5671f0822a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4008199 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Charlie Lao 000b3bfa 2022-11-28T15:06:06 Vulkan: Init mLast***Serials from CommandQueue::initialize Exposed by a recent test from Jason crrev.com/cl/4035646, If RendererVk gets re-initialized, we can't rely on CommandQueue's constructor to do initalization. We have to manually initialize mLastSubmittedSerials to 0 since destroy will set it to Infinite. Bug: b/249457381 Change-Id: I90e654981fb821324cbfb177712f604b67ccc70c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4063046 Reviewed-by: Jason Macnak <natsu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi b00fa5e5 2022-11-23T12:10:47 Vulkan: Pipeline graph dump vs pipeline libraries The pipeline graph dump code is now made aware of partial pipelines. Vertex input and fragment output pipelines are also output. As a collateral, UtilsVk pipelines are also included. Bug: angleproject:7369 Change-Id: I327fbd07b83ae42d27766847d70637ada04d86cd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4051623 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Jason Macnak 35d1736f 2022-11-28T09:27:06 Update enabled instance extenion handling - Null terminating the instance extensions at the end of initialize to potentially avoid having the nullptr interact poorly with other initialization code that scans through the enabled instance extensions. - Ensure the enabled instance extension sort happens after all desired instance extensions have been added. Bug: b/249457381 Test: cvd start --gpu_mode=guest_swiftshader Change-Id: I2a479065444ffdfd97ecbf281fe6a777e22d584c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4060238 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jason Macnak <natsu@google.com>
Alexey Knyazev 86a194c3 2022-11-24T00:00:00 Fix expected texture target for 3D blocks ASTC 3D blocks are supported only for TEXTURE_3D targets. Bug: angleproject:3675 Change-Id: I5fa2ee87666bd69272419dc1d604348f7376aa46 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4055649 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Cody Northrop 71ead7b4 2022-11-20T15:56:42 Tests: Add Diablo Immortal trace Test: angle_trace_tests --gtest_filter="*diablo_immortal*" Bug: angleproject:7402 Bug: angleproject:7837 Change-Id: I7c7ccc0099707714213564740f58f04f7965a275 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4041134 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>