src/common


Log

Author Commit Date CI Message
Roman Lavrov c0386ad4 2024-04-05T11:56:17 AsyncWorkerPool releases shared_ptr<Closure> before notifying Parallel compile (MainLinkLoadTask, Program::LinkingState) is dependent on destructor getting called before the event is notified Repro: https://crrev.com/c/5425924 More details on the parallel compile case, provided by syoussefi@: """ A race condition caused the worker pool to sometimes be destroyed from a worker thread instead of the main thread. The race condition triggered in the following scenario: - The MainLinkLoadTask holds on to the worker pool - This is necessary for the main task to spawn further tasks asynchronously - The reference to the worker pool in MainLinkLoadTask is released by its destructor - The worker thread dequeues a task (i.e. MainLinkLoadTask) to execute and holds a reference to it. - Once the task is run by the worker thread, the worker thread signals its completion - (1) At this point, the scope holding the reference to the task closes and the task is released. However, this is done after signaling the task's completion. - On program destruction, the program ensures that all its tasks are complete - This uses the signal coming from the worker thread - (2) On display destruction, the worker pool is destroyed (by dereferencing it through the shared_ptr) - The destructor of the worker pool waits for the worker thread, with the expectation that this wait is done in the main thread. The race condition led to the assert firing when (2) was done before (1). Because the task is already signaled complete, the main thread considers it done and goes ahead with the destruction of the display. However, until the scope of the worker thread closes, the task itself is still not destroyed. Since the task is holding a reference to the worker pool, that prevents the worker pool from getting destroyed too. Once the display is destroyed, the worker thread closes its scope, causing the task to be destroyed. In turn, this leads to the worker pool itself to be destroyed. On destruction, the worker pool would wait for the worker thread to end which is a deadlock. Fortunately, this was caught earlier with an ASSERT that wanted to ensure destruction happens on the main thread. In this change, the worker thread ensures it releases the task before signalling it complete, avoiding this issue. Other possible solutions would have been: - Release the worker pool from MainLinkLoadTask as soon as the subtasks are scheduled - Explicitly call a "destroy" method on the pool, instead of relying on the destructor to clean up. """ Bug: angleproject:8661 Change-Id: I37c9bc8e8f05bce4062d794df449cc3d2c80a093 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5428806 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
Geoff Lang 17facd2b 2024-03-13T10:14:59 Fix CreateDirectory name clash with Windows headers. CreateDirectory is a windows macro to CreateDirectoryA/W. This caused conflicts with the newly added CreateDirectory function which also internally called CreateDirectory with the wrong arguments. Bug: angleproject:8571 Change-Id: I596a4c2d711537e92e5e8b53b8eea2ab6b3ca7ab Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5369333 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Austin Annestrand bc633ad7 2024-01-18T12:24:40 OpenCL/Vulkan: Implement compile and link routines Enables the following OpenCL APIs for the Vulkan Backend: clCompileProgram clLinkProgram Bug: angleproject:8571 Change-Id: Ide7d2911922347055051537c9c70b83be4e24575 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5341375 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Steven Noonan c55c8ad2 2024-03-05T15:42:28 extension XML cleanup Add a bunch of missing extensions, commands, enums, and aliases to the extension XML files. These were missing when I generated a GL loader from the XML. Additionally, removing the unimplemented ANGLE_timer_query specification. Bug: angleproject:8432 Change-Id: I55b7393a313070719200c150a91b1751206ca2cb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5347156 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Auto-Submit: Steven Noonan <steven@uplinklabs.net> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 74af31ad 2024-02-28T00:00:00 GL: Add ClearsWithGapsNeedFlush workaround Enabled on older Adreno drivers to avoid clear/draw race conditions in certain cases. Fixed: angleproject:8374 Change-Id: Ifc30f66ece562027ae4dd7672fcb121f91ec4696 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5335662 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen 0ad73958 2024-03-04T11:17:36 Deduplicate and fix ConstStrLen implementations Move multiple implementations to one angle::ConstStrLen. Some of the implementations were partially incorrect, too. Fixed: angleproject:8569 Change-Id: I760c173a5b75932f4ae2fabcc4916329247d3cb5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5332384 Commit-Queue: Kenneth Russell <kbr@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya a971e5b4 2024-02-28T17:13:38 Account for zero vector axes in Mat4::Rotate(...) When the axis passed in to the Rotate function is (0, 0, 0), normalizing that vector will result in NaN values. Prevent this by returning an identity matrix and early out instead. Bug: angleproject:2306 Tests: MatrixBuiltinsTest.RotateAxisZero Change-Id: I65fd0b9944885daf56a4a35201d424e7f0aa9ba6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5333834 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Dave Tapuska cd63c5d4 2024-02-21T14:36:57 Fix build failures targetting iOS 17.4 Add ifdefs to not use deprecated APIs. Bug: chromium:40254930 Change-Id: Id2155e5014558d0c62654cec01ee32119123037c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5315376 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Hans Wennborg a6616081 2024-02-16T17:22:33 Add missing include The _byteswap* functions are declared in stdlib.h on Windows. Until recently, libc++ would provide that as part of some other header, but that changed in recent versions. Bug: chromium:325103513 Change-Id: Ie4240a3e0eab4421d9ad60f7e4f6f2f8754d47ce Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5300975 Auto-Submit: Hans Wennborg <hans@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Nico Weber <thakis@chromium.org>
Mohan Maiya 6607a2b9 2024-01-17T15:58:20 Vulkan: Add support for VK_EXT_vertex_input_dynamic_state Hook into VK_EXT_vertex_input_dynamic_state so pipeline states that differ only in vertex input state can reuse existing pipelines. Bug: angleproject:7162 Tests: StateChangeTestES3.Vertex* Change-Id: Icd3134dee93fc5fc2e9d284fcfa8c674b62faec8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5207462 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi ec2603d6 2024-02-14T13:02:35 Fix build in absence of SSE support Bug: angleproject:8536 Change-Id: Ic74c775b9291fb6bb75adcaeeab0a5f01c2cfa3b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5296385 Commit-Queue: Roman Lavrov <romanl@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com>
Geoff Lang e62bd70a 2024-01-29T14:18:07 Metal: Disable Metal on older Mac models with GPU family 1. Skip the creation of the default Metal device entirely on macs that would not pass the GPU family checks. Bug: chromium:1322521 Change-Id: I7bdc3631125a0535370328b0e1bcba347cbbd5d0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5245647 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Shahbaz Youssefi 863d4862 2024-01-27T17:42:19 Work around MSAN complaint with pool allocator - Part 2 Cache a member variable accessed after destructor so MSAN doesn't consider it having an uninitialized value. Bug: b/314793573 Change-Id: I7cb515205ed5bf3ba52d68220866009dd04f2d08 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5243114 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 0beed753 2024-01-26T12:42:28 Work around MSAN complaint with pool allocator Cache a member variable accessed after destructor so MSAN doesn't consider it having an uninitialized value. Bug: b/314793573 Change-Id: I45044e0801ae12a80301240b4de05e9cae03dcc1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5238220 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Roman Lavrov <romanl@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 175514c6 2024-01-12T14:43:33 Translator: Bundle metadata flags coming out of the translator In preparation for a follow up change that adds more such metadata. Bundling them together makes it convenient to retrieve, save and load all those flags. Bug: b/320563594 Change-Id: I4f95b32acfb0842cc5d9e72c1788a827bee2c760 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5209450 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya d093c3d3 2024-01-17T11:33:46 Add entry points for QCOM foveated extensions Add entry points for GL_QCOM_framebuffer_foveated and GL_QCOM_texture_foveated extensions Bug: angleproject:8484 Change-Id: I59053f9be76fbb8eaed344aa460ecb1e178ce7db Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5206990 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mark Lobodzinski e9aa41f5 2023-11-06T15:00:33 Trace/Replay: Add multi-context call grouping Instead of inserting eglMakeCurrent calls into the command stream where context changes occur in the traced application, track the context for all calls. During trace generation output calls grouped by context while preserving synchronization, reducing the number of context switches and improving performance. Test: Capture Diablo Immortal or Asphalt 9 trace and replay Bug: b/300965096 Change-Id: Ia02e0ddf0440ac8a9a0ef3b6af67788f2f147809 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4909217 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Shahbaz Youssefi 16bfe951 2023-12-21T10:23:05 Add README.chromium for llvm and clspv Bug: angleproject:8369 Change-Id: I20bbb38b45aace848f8002cb49f206d98c2d7aa1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5145927 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Solti Ho df4d9667 2023-12-13T18:28:53 Revert "Optimize HandleAllocator for fast ID churning." This reverts commit b25ffe5a9775cc912a304c8552dd9c097a93420a. Reason for revert: b/316162914 Original change's description: > Optimize HandleAllocator for fast ID churning. > > Instead of calculating ranges of IDs and the overhead with updating > them every allocation/release, store a released ID list in a small > FastVector. > > Optimize the allocate path for the "good case" of no reserved IDs so > that it either pops the last released ID or incriments a next value and > returns it. Release has a similar cost of just a push_back when there > are no reserved IDs. > > This adds a small fixed memory cost due to the FastVector and a dynamic > memory cost of mReleasedList having up to N elements where N is the > maxmimum total handles allocated at one time. > > Bug: angleproject:8434 > Change-Id: I7c5aa126b5303c105cd2464d0d0933b922cc2b8f > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5101509 > Reviewed-by: Charlie Lao <cclao@google.com> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:8434 Change-Id: Ide43d787b6942cc6b622e3b5d938bfbbbf3b3ebb No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5120277 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Geoff Lang b25ffe5a 2023-12-07T16:36:29 Optimize HandleAllocator for fast ID churning. Instead of calculating ranges of IDs and the overhead with updating them every allocation/release, store a released ID list in a small FastVector. Optimize the allocate path for the "good case" of no reserved IDs so that it either pops the last released ID or incriments a next value and returns it. Release has a similar cost of just a push_back when there are no reserved IDs. This adds a small fixed memory cost due to the FastVector and a dynamic memory cost of mReleasedList having up to N elements where N is the maxmimum total handles allocated at one time. Bug: angleproject:8434 Change-Id: I7c5aa126b5303c105cd2464d0d0933b922cc2b8f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5101509 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi fb6b960c 2023-11-27T14:24:28 Remove GL_CHROMIUM_texture_filtering_hint This was using an unregistered Vulkan extension to set the precision of SwiftShader's internal filtering for the sake of Chrome. That's baked in at build instead. Bug: angleproject:8349 Bug: chromium:726075 Change-Id: I12849d2d29d99626f22a92ee9d74366f78658476 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5063344 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Lu Yahan 1bdb4038 2023-11-23T16:37:37 [riscv] Add riscv support Bug: angleproject:8423 Change-Id: Id1d9b06ff18985cb66a865477c30fdac8791e9de Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5057086 Auto-Submit: Yahan Lu <yahan@iscas.ac.cn> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi d4281637 2023-11-15T13:17:36 Add names to worker threads Bug: angleproject:8417 Change-Id: I5841d194cb695387aa8fe48638cc025173152347 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5034797 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi ade3dacd 2023-11-06T21:56:41 Do compile/link unlocked if not threaded (but thread-safe) If GL_KHR_parallel_shader_compile is not supported, or it is not used to do threaded compilation and link, this change lets the compile and link jobs be done after releasing the share group lock. With multithreaded/multi-context applications, this allows the other context (typically the main context) to make progress in the meantime. A typical scenario where this optimization matters is games seamlessly loading a new area of the game and performing compilation and link in a separate context. Before this change, the game would stutter as the compile/link jobs prevent the main thread from drawing anything. With this change, the hitching is removed. Bug: angleproject:8297 Change-Id: I702d84324a7442561b49677bf42c16d650304313 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5006640 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 93b97a59 2023-11-03T22:07:23 Make link job directly wait on compile job Previously, program link waited on the compile job on the calling thread before launching the link job. As a result, sequences of intermixed compile and link would get largely serialized as such: Main Thread Thread 1 Thread 2 Thread 3 Thread 4 Compile -------> Compile Compile -----------|----------> Compile Link | | Wait | | | | | |<--------------/--------------/ \------------------------------------------> Link Compile -------> Compile | Compile -----------|----------> Compile | Link | | | Wait | | | | | | | |<--------------/--------------/ | \---------------------------------------------|-----------> Link Compile -------> Compile | | Compile -----------|----------> Compile | | Link | | | | Wait | | | | | | | | | ... With this change, the main thread no longer waits for compilation to finish. It's the link job itself that does the waiting. This allows the main thread to go through Compile and Link commands without blocking, generating as many jobs as needed. The above scenario therefore becomes: Main T1 T2 T3 T4 T5 T6 T7 T8 T9 C ----> C C ------|----> C L ------|------|----> L C ------|------|-------W---> C C ------|------|-------|-----|----> C L ------|------|-------|-----|------|----> L C ------|------|-------|-----|------|-------W---> C C ------|------|-------|-----|------|-------|-----|----> C L ------|------|-------|-----|------|-------|-----|------|----> L . \-----\------>/ | | | | | W . | \-----\------>/ | | | . | | \-----\------>/ . | | | . | | | This greatly improves the amount of parallelism compile and link jobs get. The careful observer may note that the link job being blocked on the compile job is now wasting a thread from the thread pool. While this change is strictly an improvement, parallelism can be further improved if the link job is just not assigned to a thread until the corresponding compile jobs are finished. This is currently not possible, but may be if: - Instead of a thread pool, the operating system's FIFO scheduler is used. Then the operating system would automatically put blocking tasks to sleep and pick up another task. This has the downside of requiring threads to be created for each task. - The thread pool work scheduler is enhanced to be made aware of relationship between tasks and avoid scheduling jobs whose dependencies are not yet met. Alternatively, the number of threads in the pool can be increased by 30% and hope for the best. Bug: angleproject:8297 Change-Id: If4e6540ade47558a10cfab55e2286f073b904928 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5006874 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Charlie Lao 679fe65d 2023-10-19T13:59:52 Attempt to fix FixedQueue.ConcurrentPushPopWithResize flakiness If dequeueThread has finished while the enqueue thread is sleeping, queue might still be full once enqueueThread wakes up. In this case, push call will hit assertion since queue is full. This CL makes the enqueueThread bail out if dequeueThread already finished. Bug: chromium:1493831 Change-Id: I9e3ad957c5d2eb15c5b409bb818c03dc807f3518 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4957194 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Alexey Knyazev c54c2f81 2023-10-12T00:00:00 Sync border color on format updates When a texture is redefined, its border color should be resynced because of format-specific adjustments. Used memcmp for comparing ColorGeneric structs. Bug: angleproject:7969 Change-Id: If0e3e0bc7761c26dab6d00ab24462c789f5b90bb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4935866 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Charlie Lao 5b7763f9 2023-10-12T10:59:59 Fix tsan failure of test FixedQueue.ConcurrentPushPopWithResize Test is accessing q.capacity() without mutex lock protection while modifying it in another thread. The fix here is to have the enqueue thread and dequeue thread always take its own lock and before we call updateCapacity, we take both lock. Bug: chromium:1491867 Change-Id: Ie0b844d5ee8df94c2f1c06263dddd434d1258121 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4936334 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 10d4d0ae 2023-10-12T17:48:44 Revert "Fix tsan failure of test FixedQueue.ConcurrentPushPopWithResize" This reverts commit 24dabdbbeee213d7a1fd01a70cddacc1949d3b26. Reason for revert: This did not completely fix the bug. q.full() still accessing mMaxSize. Original change's description: > Fix tsan failure of test FixedQueue.ConcurrentPushPopWithResize > > Test is accessing q.capacity() without mutex lock protection while > modifying it in another thread. The fix here is to let test keep its own > record of queue's capacity so that we dont need to get that from queue. > > Bug: chromium:1491867 > Change-Id: Ie0438ed1f4525bc4021e43098b24cd37bee3ce97 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4932359 > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Yuxin Hu <yuxinhu@google.com> Bug: chromium:1491867 Change-Id: I0332399043b369c96d64ae0b944c21e3b6507fea No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4935640 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 24dabdbb 2023-10-11T14:09:10 Fix tsan failure of test FixedQueue.ConcurrentPushPopWithResize Test is accessing q.capacity() without mutex lock protection while modifying it in another thread. The fix here is to let test keep its own record of queue's capacity so that we dont need to get that from queue. Bug: chromium:1491867 Change-Id: Ie0438ed1f4525bc4021e43098b24cd37bee3ce97 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4932359 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 6f794eab 2023-10-05T11:23:30 Change angle::FixedQueue's storage from std::array to std::vector Right now angle::FixedQueue uses std::array as the storage. In the case when queue is full, the only choice is to wait for dequeue thread to run until there is more room to enqueue. This CL try to add extra flexibility. In this CL< it switches storage to std::vector so that we could reallocate to double the storage when it is full. The trick is that before doing that, you must ensure no one is accessing the queue other than check the size. In a lot of usage cases that is easy to do by just grabbing the necessary locks. Bug: b/302739073 Change-Id: Ibefe0fd0e3e89c17dd6ee2cac6adc3368122adb9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4915811 Reviewed-by: Hailin Zhang <hailinzhang@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Roman Lavrov 53e37a3e 2023-09-29T14:15:37 Replace mActiveTextures.fill(nullptr) with memset std::array::fill yields unoptimized, unrolled loop with 8 byte increments. Surprisingly high (>2%) effect on the instructions counter in my tests (first frame of real_racing3 trace) The number of samples hitting this spot in profiling is also signficantly reduced. Impact on power harder to judge due to noise but does seem to be a bit better. Added a FillWithNullptr utility to check that nullptr is 0 and used it in other places where fill(nullptr) was used in ContextVk. It's not used elsewhere in vulkan. Bug: b/302708437 Change-Id: If7fab66d858bc10ca356418d2ab26232bb9a9ce7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4902288 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Hans Wennborg a2a16b45 2023-09-27T16:57:23 Use constexpr if to suppress more aggressive conversion warning The latest version of Clang started warning about the implicit conversion in the 'else' branch even for types where that branch is not taken. Use 'constexpr if' to passify the compiler. Bug: chromium:1487142 Change-Id: I52ae111abaeac46b586bf9f5c150c9a58e419704 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4891702 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov c9955641 2023-09-25T14:31:01 Avoid malloc in angle::Mat4 by using array instead of vector angle::Matrix<float>::inverse() showed up in cpu profile of "minetest" trace at ~10%. It's a gles1 trace. Multiple objects are constructed and require malloc due to the use of std::vector. Called here: https://crsrc.org/c/third_party/angle/src/libANGLE/GLES1Renderer.cpp;drc=eb0d59973d21f845b5785563f5d56b8ebb617478;l=371 This CL decouples Mat4 from angle::Matrix (some of the functionality had to be copied over) to switch from std::vector to std::array. Testing "minetest" on a phone I saw a ~20% cpu power improvement due to this CL. There is an existing unit test coverage: MatrixUtilsTest.Mat4InvTr Moved 4x4 cofactor matrix code to a helper with transposition included Bug: b/301977186 Change-Id: I1e4c2201d19759dd37c0fee44fb44f4d24a58a6b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4885501 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
Igor Nazarov 1833a686 2023-09-20T16:21:21 Fix FixedVector bugs and unit tests Problems: - test was not testing assignment operators; - fixed compilation error in r-value assignment operator; - r-value constructor/assignment were not resetting size. Additionally updated FixedVector.Constructors to better test copy and assignment operations. Bug: angleproject:2435 Bug: angleproject:8127 Change-Id: Ic501b8d85af0280801c7abec8fb20a0ddf67580b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4874039 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 44c6effd 2023-09-20T11:21:49 Fix potential timeout of FixedQueue.ConcurrentPushPop test The test some times times out in bots. I think what happens is that when dequeue thread went to sleep and then wake up, during sleep the enqueue thread already finished and exited (maybe because of timer runs out), then it will forever stuck in the while loop. This CL adds the check for other thread is finished or not and exit while loop if other thread has finished. Bug: b/301283364 Change-Id: Id6d846600b1749ce0bcb7b080b3b8ce3ad3d1dc4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4879083 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi b2e6a196 2023-09-11T15:27:20 Vulkan: Use VK_EXT_host_image_copy for texture uploads Of all the scenarios where host image copy may be useful, this is likely the most common case. There are numerous conditions for when the copy may be done on the host: - The image format must support it, - It must be unused by the GPU, - It must not have any pending updates (this can potentially be mitigated if needed), and - It must be in a host-copyable layout. However, many texture uploads are done: - To compressed formats, where support is highly likely, - On init, where: - the image is never previously used, - the image has no previous uploads - the image is in the UNDEFINED layout which satisfies the conditions above. As a result of this change, when the upload is done on the host, creation of a temp buffer is avoided which greatly reduces memory pressure (specially during app loading which is when most texture data is uploaded) and may even improve performance (due to avoiding a double copy). Testing the first 3 frames of the following traces with a SwiftShader implementation shows the amount of buffer allocated for staged uploads changed as such: - Black Desert: 185MB -> 65MB - Genshin Impact: 125MB -> 12MB - Asphalt 9: 138MB -> 0MB Bug: angleproject:8341 Change-Id: Id71dcc4a7a0f8b67960d2d283fe9d19ce7429a03 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4856676 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 68bfa1ed 2023-08-22T22:02:15 Support for link to be entirely parallelized The link job is split as such: - Front-end link - Back-end link - Independent back-end link subtasks (typically native driver compile jobs) - Post-link finalization Each step depends on the previous. These steps are executed as such: 1. Program::link calls into ProgramImpl::link - ProgramImpl::link runs whatever needs the Context, such as releasing resources - ProgramImpl::link returns a LinkTask 2. Program::link implements a closure that calls the front-end link and passes the results to the backend's LinkTask. 3. The LinkTask potentially returns a set of LinkSubTasks to be scheduled by the worker pool 4. Once the link is resolved, the post-link finalization is run In the above, steps 1 and 4 are done under the share group lock. Steps 2 and 3 can be done in threads or without holding the share group lock if the backend supports it. Step 2 is not yet made independent of the Context on some backends, and a frontend feature is used to make that step either run on the main thread or as a worker thread. Bug: angleproject:8297 Change-Id: I12f1e6bbaf365543dfcac969e166e0b5aa622104 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4808191 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao c5d19d76 2023-09-07T09:58:24 Reland "Load mUniformLocations using loadVector" This is a reland of commit 6f526b8f52d17bf89082a901f06df6edb75a7dbd Original change's description: > Load mUniformLocations using loadVector > > Bug: b/275102061 > Change-Id: I1da5bdd6bf0ec40cd877c2274a8fe1ee0b11267a > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4849551 > Reviewed-by: Roman Lavrov <romanl@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/275102061 Change-Id: If501db97a37b00104a9d16fc40200f772ffcd2fc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4856749 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 79691400 2023-09-09T20:50:24 Revert "Load mUniformLocations using loadVector" This reverts commit 6f526b8f52d17bf89082a901f06df6edb75a7dbd. Reason for revert: Suspected cause of MSAN failure. See: https://chromium-review.googlesource.com/c/angle/angle/+/4851776 Original change's description: > Load mUniformLocations using loadVector > > Bug: b/275102061 > Change-Id: I1da5bdd6bf0ec40cd877c2274a8fe1ee0b11267a > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4849551 > Reviewed-by: Roman Lavrov <romanl@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/275102061 Bug: chromium:1480543 Change-Id: I50c39758d180320465b152ad32ba9447878f7d8a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4855538 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Geoff Lang 74b7ec03 2023-09-08T14:26:18 GL: Don't use system info for Android SDK queries. It can be queried directly from the system property without fully gathering system info. System info often uses Vulkan which is known to be unstable on some older devices. Bug: chromium:1479277 Change-Id: Ic6ee1d0182b047b0a3210dd1067f6b7250e3da02 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4851775 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Peter McNeeley 98b0855b 2023-09-08T10:50:58 Add drm format ABGR16161616F to linux We need to support drm 16f formats for lacros HDR. Bug: chromium:1473267 Change-Id: Idd3cb5e75e1fabf046c8aa21a6b7f51aafde15e7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4851773 Reviewed-by: Peng Huang <penghuang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
Arman Uguray 765bca2f 2023-09-08T09:15:52 Add <cstring> include to FastVector.h This resolves the call to `std::memcpy` which was failing in recent skia skia rolls with an error that looked like this: error: no member named 'memcpy' in namespace 'std'; did you mean simply 'memcpy'? Bug: None Change-Id: If54ed266812315cfea35d95a57c758f75bcb270b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4851062 Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Arman Uguray <armansito@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 6f526b8f 2023-09-07T09:58:24 Load mUniformLocations using loadVector Bug: b/275102061 Change-Id: I1da5bdd6bf0ec40cd877c2274a8fe1ee0b11267a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4849551 Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Mark Lobodzinski 9c0748d3 2023-08-16T09:15:22 Capture/Replay: Trim inactive Texture resources As is done with Shader and Program objects, trim inactive Texture objects from default trace execution playback and update CapturedTest with new use cases. Bug: b/297031925 Change-Id: I734d8f1fa66a24be7790391deaeee24cf570d12a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4802281 Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Charlie Lao 632ded9e 2023-09-01T13:43:11 Load ShaderInterfaceVariableInfoMap data members with readStruct This CL groups the remaining data members of ShaderInterfaceVariableInfoMap into a POD (plain old data) struct and load it with readSTruct call (and save it with writeStruct). This CL also uses readVector for mDefaultUniformBlocks[shaderType]->uniformLayout instead of individual reads of each basic elements. Bug: b/296433003 Change-Id: I48b508822cb414cea75a6e384a0794f245460f57 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4833690 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 014e584f 2023-08-21T15:51:30 Vulkan: Separate out XFB data from ShaderInterfaceVariableInfo Right now the transform feedback data is embedded in the ShaderInterfaceVariableInfo. This caused ShaderInterfaceVariableInfo becomes non-trivial copy-able. This CL moves transform feedback related data out and into its own array, and entire vector of ShaderInterfaceVariableInfo is now memcpied. Further, most programs don't use transform feedback. Right now because transform feedback data is embedded in the ShaderInterfaceVariableInfo, it bloated the size of ShaderInterfaceVariableInfo even if you do not use XFB. This CL makes transform feedback variable info data a std::unique_ptr so that if not used, it is just a nullptr. When we load/save the structure, the ones that has nullptr gets skipped. Bug: b/296433003 Change-Id: I61940a683611717ab0445fcbf44b89b1b7166ee4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4799344 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com>
Charlie Lao 962fdf7b 2023-08-31T17:44:51 Add templated BinaryOutputStream::writeVector and writeStruct To avoid repeated code pattern, this CL adds templated BinaryInputStream::readVector and readStruct and BinaryOutputStream::writeVector and writeStruct, that does the static assertion to ensure they are trivially copyable. readIntVector/writeIntVector is removed. This CL also padding warning for ProgramExecutable::PODStruct to avoid potential Msan complain. Bug: b/296433003 Change-Id: I8e718b41cde898960b9e86a2d7d1bc5a837fe561 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4834700 Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 519d330c 2023-08-28T15:41:18 Add GL_RGBX8_SRGB_ANGLEX and GL_BGRX8_SRGB_ANGLEX formats If app creates AHB with sRGBX format, and then create a EGLImage, Image::initialize() will retrieve the sized format from AHB, which is GL_RGBX_ANGLE, and then try to convert to sRGB color space. The bug here is that GetNonLinearFormat will pick GL_SRGB8 for all these formats :GL_RGB8, GL_BGRX8_ANGLEX, GL_RGBX8_ANGLE. This means that different AHBS with these three different format will end up createing a tetxure with same format which sRGB. I think the reason somone did it this way initially simply because there is no sRGB corresponding format available for BGRX8 and RGBX8. This CL adds sRGB internal version of these two formats, thus make it straight forward to pick the correct sRGB format. The other change here is for AHBs, right now we are always force mRequiredImageAccess to be Renderable. This actually workedaround the bug that mentioned earlier that we are picking the wrong format. Because of forced renderable, we end up with SRGB fallback to SRGBA. But external images should not fallback, we should use its existing format as is since it can be accessed via AHB interface directly. Bug: b/298037344 Change-Id: I6119c4015cc5bf0effdf0530cb756b6c4656c38f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4819053 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Geoff Lang 3e333c7b 2023-08-30T13:25:08 Check that postTask is non-null before calling it. ANGLE's platform methods are global but Chrome treats them as if they are per-display. If multiple displays are created, Chrome can reset the methods for all displays during angle::ResetPlatform. ANGLE checks that postTask is non-null before creating DelegateWorkerPool but not before each use of postTask. Bug: chromium:1476679 Bug: chromium:1475471 Change-Id: Ie84db48d6c85a1befa604224af6c30bd3515aadf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4827983 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao b8d5a423 2023-08-21T14:43:42 Add static_assert(std::is_trivially_copyable<LinkedUniform>(),"") Since we are using memcpy for LinkedUniform, it is desirable to utilize compile time assertion to ensure that in future if anyone modifies POD struct (and the class of data members of POD struct) and made it that no longer memcopy-able, we would immediately caught at compile time. std::is_trivially_copyable<>is exactly for this reason. In order to make this work, the POD struct and any data it uses can not have user defined copy constructor. The problem is that right now ANGLE is using clang_use_chrome_plugins=true, and chrome-style generates warnings if the complex struct (has more than 10 data members) does not define a copy constructor, and that warning causes build failure with -Werror. So clang_use_chrome_plugins=true and std::is_trivially_copyable have this conflicting requirements that I can not apply both. This has been raised to compiler team, but before we get a solution from them, if we have to make a choice, I think the better choice is to disable clang_use_chrome_plugins and apply std::is_trivially_copyable, since the later is more critical to ensure safety, while chrome-style is mostly trying to minimize the code size, but won't affect correctness/robustness. This CL sets clang_use_chrome_plugins to false, and removes the copy constructor and copy assignment operator from BitSetT and LinkedUniform and added static assertion is_trivially_copyable for LinkedUniform. Same thing applied to ProgramInput as well. In future once we have a better solution from compile team, we can re-enable clang_use_chrome_plugins and disable only for structs that requires is_trivially_copyable assertion. Bug: b/275102061 Change-Id: If33415ea61deda568d855a7dd6a4fd6042058be5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4799342 Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Roman Lavrov 9f4bddd8 2023-08-24T10:54:43 Cleanup: remove unused ANGLE_ASSERT_IMPL Bug: b/297343154 Change-Id: Iccde6b93fd26aa5b575a11d0ac61c59f03508567 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4810192 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Roman Lavrov <romanl@google.com>
Shahbaz Youssefi f3c1de36 2023-08-17T15:29:24 Make shader recompile while parallel linking safe Prior to this change, Program* objects held references to Shader* objects. This poses a problem where a shader recompile can race with a program link, if the program link is done in parallel. As a result, a good chunk of the link job is done serially and under the share group lock. After this change, that is no longer a problem, and most of the link can be made lockless/parallelized. This change separates out the "compiled state" from the rest of the shader state. This was already done for the front-end state (for the sake of caching), but is also now done for the backends that need it. The compiled state in turn is placed in a shared_ptr, and is shared with the program. When a shader is compiled, its own shared_ptr is replaced with a new object, leaving all programs currently compiling unaffected and using the previous compilation results. Once a program is linked, its references to compiled shader states is updated. Bug: angleproject:8297 Change-Id: Iff7094a37088fbad99c6241f1c48b0bd4c820eb2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4791065 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Jeff Vigil 1bd45c4f 2023-07-17T14:18:53 Add tiling mode for GL_EXT_memory_objects Add set and get TexParameter for pName GL_TEXTURE_TILING_EXT Add test case to VulkanImageTest for import LINEAR memory object Bug: angleproject:8274 Change-Id: I4432093e41f45e3926a27e3dee00d48c0438cae5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4752793 Reviewed-by: Jeff Vigil <j.vigil@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: mohan maiya <m.maiya@samsung.com>
Charlie Lao c34f83d9 2023-08-16T11:53:27 Group all ProgramExecutable basic data type members into a struct So that we can load/save with a simple memcpy. Bug: b/275102061 Change-Id: I178404fd72b615174a7a0412ea5482ae2bea2f80 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4785567 Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 5217beb2 2023-08-15T13:43:12 Reland "Tightly pack LinkedUniform by using int16_t" This is a reland of commit 152cf62b38874238095a91307e4ea9bcdedf8f46 Original change's description: > Tightly pack LinkedUniform by using int16_t > > There is a check of vector size when we link uniforms and the maximum > vector size is 4096 due to we clamp the maxUniformBlockSize to 64KB. In > reality, if we exceeds this number, program link will take really long > time and then hit failure. So there is no real need to keep all the > variables in 32 bit integer. This CL changes to 16 bit integer. Further, > sh::BlockMemberInfo and ActiveVariable data members are embeded into > LinkedUniform struct as well so that the unused variables can be removed > and data can be tightly packed. This also makes LinkedUniform easier to > maintain as a simple struct with basic data types. With this change, > LinkedUniform size is reduced from 108 bytes down to 60 bytes, 48 bytes > reduction. Given some apps has 200-ish uniforms, this CL reduces 48 > bytes x 200 = ~9K memory just for uniforms per program (which goes > through hash compute and decompression and file reads). > > Bug: b/275102061 > Change-Id: I7fae20f5b75f3239305e2094a992e3040b8c8e4c > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4754133 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/275102061 Change-Id: I1cdec9407e930608d3239a104dcbf77c8d8e2113 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4791661 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Vivian Pao 9f48f931 2023-08-16T06:38:15 Revert "Tightly pack LinkedUniform by using int16_t" This reverts commit 152cf62b38874238095a91307e4ea9bcdedf8f46. Reason for revert: Suspect cause of failure in for several Linux MSan Tests, e.g. https://ci.chromium.org/ui/p/chromium/builders/ci/Linux%20MSan%20Tests/42403/overview https://ci.chromium.org/ui/p/chromium/builders/ci/WebKit%20Linux%20MSAN/22174/overview https://ci.chromium.org/ui/p/chromium/builders/ci/Linux%20MSan%20Tests/42403/overview Original change's description: > Tightly pack LinkedUniform by using int16_t > > There is a check of vector size when we link uniforms and the maximum > vector size is 4096 due to we clamp the maxUniformBlockSize to 64KB. In > reality, if we exceeds this number, program link will take really long > time and then hit failure. So there is no real need to keep all the > variables in 32 bit integer. This CL changes to 16 bit integer. Further, > sh::BlockMemberInfo and ActiveVariable data members are embeded into > LinkedUniform struct as well so that the unused variables can be removed > and data can be tightly packed. This also makes LinkedUniform easier to > maintain as a simple struct with basic data types. With this change, > LinkedUniform size is reduced from 108 bytes down to 60 bytes, 48 bytes > reduction. Given some apps has 200-ish uniforms, this CL reduces 48 > bytes x 200 = ~9K memory just for uniforms per program (which goes > through hash compute and decompression and file reads). > > Bug: b/275102061 > Change-Id: I7fae20f5b75f3239305e2094a992e3040b8c8e4c > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4754133 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/275102061 Change-Id: Id344e306307553731097f06edafc40bfeb73ff80 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4780494 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Charlie Lao 152cf62b 2023-08-15T13:43:12 Tightly pack LinkedUniform by using int16_t There is a check of vector size when we link uniforms and the maximum vector size is 4096 due to we clamp the maxUniformBlockSize to 64KB. In reality, if we exceeds this number, program link will take really long time and then hit failure. So there is no real need to keep all the variables in 32 bit integer. This CL changes to 16 bit integer. Further, sh::BlockMemberInfo and ActiveVariable data members are embeded into LinkedUniform struct as well so that the unused variables can be removed and data can be tightly packed. This also makes LinkedUniform easier to maintain as a simple struct with basic data types. With this change, LinkedUniform size is reduced from 108 bytes down to 60 bytes, 48 bytes reduction. Given some apps has 200-ish uniforms, this CL reduces 48 bytes x 200 = ~9K memory just for uniforms per program (which goes through hash compute and decompression and file reads). Bug: b/275102061 Change-Id: I7fae20f5b75f3239305e2094a992e3040b8c8e4c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4754133 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Geoff Lang f4e901b4 2023-08-07T10:52:09 Validate program binaries are the same CPU bit-ness. ANGLE's program binary serialize/deserialize logic uses size_t and other non-fixed sized integer types. This can cause crashes if the CPU architecture changes between saving and loading of binaries. Bug: chromium:1470074 Bug: angleproject:8223 Change-Id: Ib2529e0e6e66e28a184aa1ec94075e343e1f1d5e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4752265 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 2a950c63 2023-07-31T00:00:00 Adjust ANGLE_stencil_texturing specification STENCIL_INDEX enum is not defined in GLES/gl3.h, so the extension has to provide its value. Bug: angleproject:8051 Change-Id: Ia383162afee8cdcffc1d68ddf833fbd91a87b1f0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4748399 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Brian Ho 19671376 2023-07-28T13:37:38 Reland "Search for system libvulkan on CrOS" Currently, ANGLE searches in the "module" directory for libvulkan during init on CrOS. The library doesn't exist at this location (/opt/google/chrome/libvulkan.so), and we should instead just call dlopen(libvulkan.so) to search the system library paths. The original CL was reverted because it broke MSAN builds of ChromeOS-on-Linux (CrOS UI that runs on a generic Linux machine). The original CL caused these builds to use the Linux system Vulkan loader library which is most likely not built with MSAN. This caused MSAN violations when combined with an ANGLE built with MSAN [1]. The reland fixes this issue by only using the system libvulkan on real ChromeOS devices. [1] go/msan#false-positives Bug: b/292249282, chromium:1467779 Change-Id: Iafcd8d315a0baddcfbb847c3ad198f267887c8f8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4727448 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Brian Ho <hob@chromium.org>
Lei Zhang 704469ca 2023-07-31T10:24:59 Remove unused BrokenClampThatShouldNotBeUsed() It has no references. Bug: chromium:1231569,chromium:1373621 Change-Id: Id1477100ed9ec4df28f7d28b09c9e04c1a49125c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4734693 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Lei Zhang <thestig@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 5446e87e 2023-07-24T16:46:56 Improve ProgramExecutable::load performance We are calling push_back for each vector inside ProgramExecutable. This causes c++ run time to constantly re-allocate storage and copy the vector over to new storage, and impacts performance negatively. Since the vector size is know when we load program from cache, this CL calls resize to the correct size first and then update each element as we walk over, thus reduces the vector storage reallocation. This CL reduces blade_and_soul_revolution frame time from 4.48 ms to 4.35 ms on pixel 7 pro. This CL also changes ProgramBinaryTest tests to use slightly more complicated program instead of the simplest program. Bug: b/275102061 Change-Id: I8d92117b07a9ad2d0851850e473ea1b86f9868f8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4713685 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Brian Ho af5bf5b8 2023-07-26T19:59:01 Revert "Search for system libvulkan on CrOS" This reverts commit b0b71d59391c99e70b40d7f331f530e6ea1970e5. Reason for revert: Broke MSAN build on ChromeOS-for-Linux Original change's description: > Search for system libvulkan on CrOS > > Currently, ANGLE searches in the "module" directory for libvulkan > during init on CrOS. The library doesn't exist at this location > (/opt/google/chrome/libvulkan.so), and we should instead just call > dlopen(libvulkan.so) to search the system library paths. > > Bug: b/292249282 > Change-Id: I7ab4803fe294e69f0ab8533ebc2fa43e25f189eb > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4716242 > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Commit-Queue: Brian Ho <hob@chromium.org> Bug: chromium:1467779 Change-Id: Ib3095b51559660ac438ba9af4327b08d334d19b3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4722705 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Roman Lavrov <romanl@google.com> Auto-Submit: Brian Ho <hob@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Brian Ho b0b71d59 2023-07-25T12:53:49 Search for system libvulkan on CrOS Currently, ANGLE searches in the "module" directory for libvulkan during init on CrOS. The library doesn't exist at this location (/opt/google/chrome/libvulkan.so), and we should instead just call dlopen(libvulkan.so) to search the system library paths. Bug: b/292249282 Change-Id: I7ab4803fe294e69f0ab8533ebc2fa43e25f189eb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4716242 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Brian Ho <hob@chromium.org>
Shahbaz Youssefi 2d5fb09d 2023-07-22T22:34:20 Stubs for EGL_ANGLE_external_context_and_surface Bug: angleproject:5509 Change-Id: I8e2395784abcd2b4e3e1f888e70a879ef49287bc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4706026 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Dave Tapuska 507f67cc 2023-07-14T15:23:48 Fix cfi issue with Angle invoking worker pool Mark the function as ignoring cfi-icall because of broken upstream builds. https://ci.chromium.org/ui/p/chromium/builders/ci/Linux%20CFI/25615/overview Bug: angleproject:8256 Change-Id: I63b5fee27bc0565dc6881bd83fd284abc7a9f1f0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4685324 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Dave Tapuska <dtapuska@chromium.org>
Geoff Lang 972f8107 2023-07-14T12:05:40 Reject program binaries when the renderer string changes If the underlying driver changes, reject program binaries from the old versions. The driver is supposed to do this for us (on OpenGL, at least) but this adds some extra protection. Bug: angleproject:4981 Change-Id: Id9486d8e6f9136970c0d7c37d59dea5d43b0a50e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4685317 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Dave Tapuska fe08eee8 2023-07-12T18:03:30 Fix Angle creating its own worker pool. The WorkerPool was created on the first postTask and could create a number of threads. We were seeing this on blink for iOS where we would have expected using the delegate's worker pool. However ANGLE_ENABLED was undefined because it wasn't included. This caused the comparison of ANGLE_DELEGATE_WORKERS to not work. Instead of including the header for ANGLE_ENABLED since that would cause a dependency on libAngle, just use #if X instead, while this also isn't the best because X can be undefined its a solution for now. Bug: angleproject:8256 Change-Id: I5aeb686dcc117feaba884cdea5c89e4b146cb57f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4679894 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 94ceedb7 2023-07-10T00:00:00 Add GL_EXT_texture_compression_astc_decode_mode stubs Bug: angleproject:8254 Change-Id: I2a839139b5738710e32842b04db35eab8fb04687 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4679683 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev b57d5638 2023-06-29T00:00:00 Reland "Cleanup multiview support" This is a reland of commit 9a7c0b88ba68e328d3f5f7991a6df0ab5de92311 Original change's description: > Cleanup multiview support > > * Removed remaining mentions of ANGLE_multiview > > * Removed AST transformations used only in > the side-by-side multiview implementation > > * Changed the type of the internal ViewID_OVR > variable to use the dedicated qualifier > > * Removed side-by-side multiview support > from the D3D11 renderer > > * Removed an unused helper for side-by-side > multiview support from the OpenGL renderer > > * Removed obsoleted test suppressions Fixed: angleproject:3341 Change-Id: I3ce9304c79c0873462c73e8cf02b85f7a1aaf874 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4669604 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Anne Redulla 66c2e4fc 2023-07-04T17:02:07 [ssci] Added Shipped field to READMEs This CL adds the Shipped field (and may update the License File field) in Chromium READMEs. Changes were automatically created, so if you disagree with any of them (e.g. a package is used only for testing purposes and is not shipped), comment the suggested change and why. See the LSC doc at go/lsc-chrome-metadata. Bug: b/285450740 Change-Id: I770554248e33c1e50938cc32daee36a83b643ec9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4672125 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi f0deadab 2023-07-06T15:19:03 Revert "Cleanup multiview support" This reverts commit 9a7c0b88ba68e328d3f5f7991a6df0ab5de92311. Reason for revert: Suspected cause of crash on Canary Original change's description: > Cleanup multiview support > > * Removed remaining mentions of ANGLE_multiview > > * Removed AST transformations used only in > the side-by-side multiview implementation > > * Changed the type of the internal ViewID_OVR > variable to use the dedicated qualifier > > * Removed side-by-side multiview support > from the D3D11 renderer > > * Removed an unused helper for side-by-side > multiview support from the OpenGL renderer > > * Removed obsoleted test suppressions > > Fixed: angleproject:3341 > Change-Id: I5e0706cbf26ea820b51400124ddbf2624b738f17 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4660046 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Bug: chromium:1462504 Bug: chromium:1462505 Bug: chromium:1462506 Bug: chromium:1462478 Bug: chromium:1462531 Change-Id: Ie0e76b1c6823db19f68bb67fdfc8abc00cc62f88 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4666209 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Alexey Knyazev 9a7c0b88 2023-06-29T00:00:00 Cleanup multiview support * Removed remaining mentions of ANGLE_multiview * Removed AST transformations used only in the side-by-side multiview implementation * Changed the type of the internal ViewID_OVR variable to use the dedicated qualifier * Removed side-by-side multiview support from the D3D11 renderer * Removed an unused helper for side-by-side multiview support from the OpenGL renderer * Removed obsoleted test suppressions Fixed: angleproject:3341 Change-Id: I5e0706cbf26ea820b51400124ddbf2624b738f17 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4660046 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
L. E. Segovia ed391dae 2022-03-25T16:36:39 Replace `extern thread_local` to avoid GCC < 9.1 bug GCC generates broken code for mingw-w64 target when accessing `extern thread_local` variables from another compilation unit. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104862 See: https://invent.kde.org/graphics/krita/-/blob/master/3rdparty/ext_googleangle/02-patches_krita/0017-Replace-extern-thread_local-to-avoid-GCC-mingw-w64-b.patch Co-authored-by: Alvin Wong <alvinhochun@gmail.com> Bug: None Change-Id: Ief0036054e644d40b8b0e86ed990280e566da2a9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4637587 Auto-Submit: L. E. Segovia <amy@amyspark.me> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan 113f847b 2023-06-26T12:07:52 centralize basic OS/platform detection functions We had multiple different places that defined these, and with varying naming schemes. Centralize them to be defined in platform_helpers.h. Also renaming the IsApple(uint32_t) functions to IsAppleGPU(uint32_t) to avoid ambiguous meaning: "IsApple" should mean "is Apple-vended OS" while "IsAppleGPU" should mean "is Apple GPU vendor ID". Bug: angleproject:8229 Change-Id: If4e3fc5ac1b5b8ad416663950a1b2ee912ccad99 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4647291 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Steven Noonan <steven@uplinklabs.net> Auto-Submit: Steven Noonan <steven@uplinklabs.net> Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 9faf7059 2023-06-20T19:04:49 Optimize angle::Spinlock performance This optimization is a preparation for future commits. Performance was tested by defining `ContextMutexType = angle::Spinlock` to use `SharedContextMutex<angle::Spinlock>` as `mSharedContextMutex`. Test result is average time for 1000'000 `glGetError()` calls on S906B with locked CPU frequencies: SharedContextMutex<angle::Spinlock> Before the optimization: 14.289 ms After the optimization: 12.941 ms (-9.4%) Performance when not using `angle::Spinlock` (current code): SingleContextMutex: 9.115 ms (-36.2%) SharedContextMutex<std::mutex>: 29.186 ms (+204.3%) Bug: angleproject:8226 Change-Id: I447ff807cd6b72ff3fc115e73736fe63eb642785 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4632728 Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan 7a38d614 2023-06-23T01:56:43 remove ScheduleYield, replace with std::this_thread::yield Instead of hand-rolling this function, just use std::this_thread::yield, which has the advantage of being cross-platform and using an underlying implementation that's actually more correct on Windows[1][2]. [1] https://github.com/microsoft/STL/blob/40640c6df9754ea031f8df7c720b89714d19df97/stl/src/cthread.cpp#L84-L86 [2] https://joeduffyblog.com/2006/08/22/priorityinduced-starvation-why-sleep1-is-better-than-sleep0-and-the-windows-balance-set-manager/ Bug: angleproject:8232 Change-Id: I9053fa362f328dc45b7c13f5f70818adf89a290f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4639490 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan f6c7dc89 2023-06-23T02:21:02 Spinlock: implement ANGLE_SMT_PAUSE for ARM/ARM64 This intrinsic is available on GCC, Clang, and MSVC. Bug: angleproject:6067 Change-Id: I010eefa3417df196407fb8182c0de927f4bf0cab Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4639491 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 764f31be 2023-06-22T23:52:43 Add more BitSetArray tests Bug: angleproject:8224 Change-Id: I8835da245df52e1be2e3e4ea17e32ce8c438e51e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4636870 Reviewed-by: Roman Lavrov <romanl@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
L. E. Segovia 566f1ee4 2022-03-10T16:25:34 mathutil: Enable usage of builtins for MinGW GCC too See: https://invent.kde.org/graphics/krita/-/blob/master/3rdparty/ext_googleangle/02-patches_krita/0011-Fix-MinGW-build.patch Co-authored-by: Alvin Wong <alvinhochun@gmail.com> Bug: None Change-Id: I9663a11d62a61674b361fc46eeb53b3c3096ccbd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4637585 Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: L. E. Segovia <amy@amyspark.me> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 16d65289 2023-06-20T17:27:01 Vulkan: Remove hashing of the SPIR-V id in variable map The interface variable ids are already mostly packed, so a flat array will do with the id as key. Bug: angleproject:7220 Change-Id: I17cded0378b1b67379b979b00d69bbe04088a840 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4628975 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 7adf6532 2023-06-20T16:31:34 Remove unused helper classes Bug: angleproject:6954 Change-Id: I325f6a67b1f2f1dffdf051f83a8d4f29c4fe25dd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4628678 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang b46344bb 2023-06-12T13:50:40 Metal: Cache render pipelines at the context level Cache Metal render pipelines in a new mtl::PipelineCache which lives at the context level. This allows us to clean up unused pipelines from programs that are not actively used. The cache limits were chosen based on running Chromium. Without a limit, the total number of pipelines peaks at ~200. With frequent GCs, the active working set usually sits at ~60 pipelines. Bug: chromium:1329376 Change-Id: Ifa83b797c893684294e16dd638f6b3a35e1d043f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4608486 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Romaric Jodin 8882feeb 2023-06-13T09:24:23 common: linux: add support for DRM_FORMAT_NV12 In DrmFourCCFormatToVkFormats convert DRM_FORMAT_NV12 to VK_FORMAT_G8_B8R8_2PLANE_420_UNORM. DmaBufImageSiblingVkLinux can already consume it. BUG: b/277798516 Change-Id: I3173763101cf926fb2277651918631ec4de76e96 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4604507 Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 10380f4b 2023-06-06T11:52:08 Vulkan: Output SPIR-V ids from compiler In this change, the shader interface variables are given SPIR-V ids by the compiler before SPIR-V generation. Those ids are made available through the ShaderVariable interface. The transformer does not yet rely on this information. A follow up change will rework the backend's name->info map and the transformer to directly use ids instead of names. Bug: angleproject:7220 Change-Id: Ic0a62681d4bcf3ed171c39c3ecd83e438ea068c8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4600609 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Steven Noonan a01a566c 2023-06-09T00:31:06 extension xmls: fix incorrect use of <ptype> tags I was having trouble using some GL/EGL loader generators because of some errors in the XML definitions for ANGLE. The first major problem is the content of the <ptype> tags. Let's refer to the Khronos registry XML schema (which is annoyingly a PDF rather than an xsd that we can test against, though I don't know if an xsd would catch this anyway): https://raw.githubusercontent.com/KhronosGroup/OpenGL-Registry/master/xml/readme.pdf In section 12.4.2, "Contents of <param> tags" it states: The <ptype> tag is optional, and contains text which is a valid type name found in <type> tag, and indicates that this type must be previously defined for the definition of the command to succeed. Builtin C types, and any derived types which are expected to be found in other header files, should not be wrapped in <ptype> tags Note that the above is repeated for the contents of <proto> tags as well. The extension XML files currently have a bunch of <ptype> tags which don't meet the expectations described above. The correct transformation for them would be, for example: <ptype>GLfloat *</ptype> -> <ptype>GLfloat</ptype> * <ptype>void *</ptype> -> void * <ptype>const char *</ptype> -> const char * <ptype>EGLAttrib *</ptype> -> <ptype>EGLAttrib</ptype> * The next issue is that some tags have some typos, such as "<pytpe>" instead of "<ptype>". (Now *that* is something an .xsd would catch...) The last issue is the use of the typename "GLvoid" which is not as serious a problem. It is still defined in Khronos' gl.xml <types> block, but Khronos no longer uses it in their XML registries. The comment for the "GLvoid" type in their <types> block states: <type comment="Not an actual GL type, though used in headers in the past">typedef void <name>GLvoid</name>;</type> So we might as well replace those with just plain "void". Anyway, long story short: to apply these transformations, I used Perl regular expressions, and applied these expressions in order: - Fix the tag misspellings: s#<(/?)pytpe>#<\1ptype>#g - Move the const qualifiers (if present) and pointer asterisk(s) (if any) outside the <ptype> tag itself: s#<ptype>(const )?([A-Za-z0-9]+)[ ]?(\*\*?)</ptype> #\1<ptype>\2</ptype> \3#g - Replace "GLvoid", "char", and "void" inside ptype tags to normal C types outside tags: s#<ptype>(GLvoid|void|char)</ptype>#\1#g Bug: angleproject:8190 Change-Id: Ib0bea79fecb7e714910b6e92124bb9f52994d0fb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4603709 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yiwei Zhang e005fbc0 2023-06-08T23:27:27 Vulkan: make GetFormatModifierProperties non-fatal for fallback check DmaBufImageSiblingVkLinux::initWithFormat is used to fallback like: - mutable format + srgb - mutable format + unorm - non-mutable srgb - non-mutable unorm However, it never fallbacks since GetFormatModifierProperties bails.So this change has made it non-fatal to allow fallback behavior. Meanwhile, this change updates the fallback order to use unorm as actual format first to favor most common scenarios. Bug: b/277798516 Change-Id: I60283590d85b27d55010cb2f5a2cc13d4df1ac9c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4603208 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Romaric Jodin <rjodin@chromium.org>
Cody Northrop d8339e78 2023-05-25T08:40:48 FrameCapture: Support EGLSync in MEC This CL starts treating EGLSync as a tracked resource, such that we can detect when they need to be created in Setup, or regenerated in Reset. Test: MEC of infinity_ops trace Test: Replay new kentucky_route_zero trace without error Bug: angleproject:8176 Change-Id: I130212f6edb78d9df29dd6e572843df25493ae09 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4566949 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 4ff41604 2023-05-31T11:12:33 Vulkan: Declare common SPIR-V ids in the compiler The SPIR-V transformer no longer needs to discover these ids. Bug: angleproject:7220 Change-Id: I7082e831308eaac97ace3c128f398ff5f5497739 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4573825 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 5f833ff2 2023-05-31T00:06:24 Vulkan: Pass non-semantic info from translator to transformer The SPV_KHR_non_semantic_info extension is set up in this change to allow the translator to communicate an overview of the SPIR-V to the SPIR-V transformer as well as mark locations of interest. This would help the SPIR-V transformer avoid having to discover basic ids and such locations. In this change, a few basic types are predefined and the location where new types and variables need to be defined are marked. Bug: angleproject:7220 Change-Id: I237b9a79efa9c192b3b11f1d97bc9b6a5cc2f8fb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4573823 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 409bf134 2023-05-23T00:00:00 Metal: Adjust iOS and macCatalyst caps * Fix swapped iOS and macCatalyst versions for EXT_blend_func_extended and EXT_depth_clamp * Always use 13.1 as the lowest macCatalyst version Bug: angleproject:8121 Bug: angleproject:8047 Bug: angleproject:8015 Change-Id: I1f117de259d211cb8ce2463df59f8fee0e709ef5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4568323 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Mark Lobodzinski 8fdb164b 2023-05-11T10:03:57 Capture/Replay: Get and use actual EGLDisplay in trace ANGLE traces were using ANGLE_NO_DISPLAY for EGLDisplay args in traces. After the EGLSyncMap was added this caused error messages in Android and Linux playback of some traces. Added a global EGLDisplay to traces and initialized it with the proper value. Test: angle_trace_tests --gtest_filter=infinity_ops Bug: b/282725258 Change-Id: I1e6522cd4fdfee136c1e296805dac9d9f71256f3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4534096 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Geoff Lang bcbf23c5 2023-05-16T11:08:13 When loading SwiftShader on Mac, look in "Libraries" If ANGLE is statically linked into Chrome, SwiftShader's dylibs will be in the Libraries folder. Search in both the current module directory and the Libraries folder to handle both cases. Bug: chromium:1445969 Change-Id: I1d6ca3bb7b77fe0c23cb932c95f22f1754eaf9e5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4538366 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jason Macnak 5ab2fa96 2023-05-12T08:38:19 Vulkan: Move texture QFOTs to syncState() ... (and getAttachmentRenderTarget() which is syncState()-like for deferred clear) so that QFOTs are not actually scheduled until first use. SurfaceFlinger optimistically creates EGL images and textures for AHBs in case it does need them in the future. However, the images and textures may go unused. Prior to this change, ANGLE would create pending QFOT barriers while importing AHBs into EGL images and GL textures. However, SurfaceFlinger may not be doing any "real work" (other than repeatedly creating and destroying EGL images and GL textures) which would result in the command buffers containing the QFOTs being flushed. This can result in a large build up of unreleased memory (as the VkDeviceMemory would still be kept alive by the reference from the unflushed QFOT command buffer) and lead to the low memory killer nuking processes. Bug: b/282075554 Test: cts -m CtsOpenGLTestCases -t android.opengl.cts.GLSurfaceViewTest Test: adb shell dumpsys SurfaceFlinger Test: angle_end2end_tests --gtest_filter=ImageTestES3.AHBImportReleaseStress/ES3_Vulkan Change-Id: I7776abb2c6f834e96aa3926c26e77c53352ee561 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4527437 Commit-Queue: Jason Macnak <natsu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jean-François Geyelin c2c8b062 2023-05-11T22:38:48 [Risc-V] Fix definition of kAndroidOpenGLTlsSlot. On Risc-V, ANGLE was using a TLS offset of 3. This worked... sometimes! On Risc-V, the android OpenGL TLS slot is supposed to be -5, as per tls_defines.h. Tested by running cuttlefish with Swiftshader + ANGLE on Risc-V Bug: b/273278430 Change-Id: Ib32f7dbcc158085b75f4befc277a03229ff87152 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4521034 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Jean-François Geyelin <jif@chromium.org>
Amirali Abdolrashidi 6f959e07 2023-04-28T16:00:11 Vulkan: Add non-device memory option for VMA image * Updated the required flags for allocateAndBindMemory() to no longer include VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, though still preferred. This allows VMA to allocate from another memory type if the device is out of memory. * Added a debug message to indicate when allocated memory for VMA image does not have all the preferred property flags. * Also added a warning in the case of memory allocation fallback. * Added a perf counter to keep track of image allocation fallbacks from the device memory. * deviceMemoryImageAllocationFallbacks * Added a test to make sure that VMA images can still be allocated from other memory types even if device memory is unavailable. * VulkanImageTest.AllocateVMAImageWhenDeviceOOM Bug: b/280304441 Change-Id: Ic452c18ded25345cdb7e271442372b99aede045e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4493483 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Geoff Lang e482d4b2 2023-05-08T17:53:14 Store the temp file name in a std::string instead of stack array It's possible to overflow the tempFile buffer if the temporary file directory is too long. Bug: chromium:1443445 Change-Id: Id6038f54cba2dfb524a5602df99bf775aecb4450 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4515532 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Charlie Lao 76fa3806 2023-05-04T10:19:35 Vulkan: Expand BufferOnly path for VertexArray binding change VertexArrayVk has a fast code path for attribute change where the only change is buffer (i.e, no format or relativeOffset change). It will pass in bufferOnly to syncDirtyAttrib() call and will avoid invalidate graphics pipeline. This CL expands DIRTY_BIT_BINDING_n change and will also try to detect the bufferOnly case. This CL and crrev.com/c/4507978 together seeing Gfxbench driver overhead score improves 1.48% (from average 6804 before CLs to 6905 after CLs) on pixel 7 pro. Bug: b/277644512 Change-Id: I71da1b886bb26ba2629b83af3aeaba4d45c3d3c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4504919 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Auto-Submit: Charlie Lao <cclao@google.com>
Charlie Lao 0561884e 2023-04-26T17:26:42 Vulkan: Dirty VertexArray binding bit if buffer storage change In crrev.com/c/3669603, we did optimization for black_desert_mobile that when vertex array is unbound, we remove vertex array from buffer's observer list to reduce overhead of observer notifications when buffer is been modified. To compensate for the lost notification, when vertex array is bound, we always assume every buffer that is bound to vertex array has been dirtied, for the simplicity at that time. This CL further the optimization of that CL. In this CL, I moved the dirty bit set into backend and improves vulkan backend by checking buffer's serial number and only dirty the binding if the serial has changed. Given this, now we can also remove all the non-current vertex array from buffer's observer list (previously it is heuristic based with a hard coded observer count limit). This and the previous CL improves asphalt_9 by ~1%. Bug: b/277644512 Change-Id: Ibc3f8e3df9fe70c6879e0b2bca86d8487a9dba73 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4481241 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>