|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|