Issue 8667 in angleproject: Make glBind* calls not take the share group lock

1 view
Skip to first unread message

syous… via monorail

unread,
Apr 15, 2024, 12:36:00 AM4/15/24
to angleproj...@googlegroups.com
Status: Available
Owner: syou...@chromium.org
Priority: Medium
Type: Enhancement

New issue 8667 by syou...@chromium.org: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667

The share group lock is expensive, and these calls are frequent. By using a lightweight lock to protect the resource maps, these calls can be free of the share group lock.

--
You received this message because:
1. The project was configured to send all issue notifications to this address

You may adjust your notification preferences at:
https://bugs.chromium.org/hosting/settings

syous… via monorail

unread,
Apr 15, 2024, 12:36:19 AM4/15/24
to angleproj...@googlegroups.com
Updates:
Components: Performance

Comment #1 on issue 8667 by syou...@chromium.org: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c1

(No comment was entered for this change.)

syous… via monorail

unread,
Apr 15, 2024, 12:36:40 AM4/15/24
to angleproj...@googlegroups.com
Updates:
Cc: m.ma...@samsung.com

Comment #2 on issue 8667 by syou...@chromium.org: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c2

Git Watcher via monorail

unread,
Apr 16, 2024, 11:49:12 AM4/16/24
to angleproj...@googlegroups.com

Comment #3 on issue 8667 by Git Watcher: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c3

The following revision refers to this bug:
https://chromium.googlesource.com/angle/angle/+/d9d583bfdc05d3ccbcb4c048fe6693652d89d4ba

commit d9d583bfdc05d3ccbcb4c048fe6693652d89d4ba
Author: Shahbaz Youssefi <syou...@chromium.org>
Date: Mon Apr 15 04:24:47 2024

Implement a lock/unlock-only mutex based on futex

Pthread mutexes are expensive due to their numerous features. When a
mutex only needs to support lock and unlock, its implementation can be
much simpler. The implementation in this change is "inspired" by a
similar mutex in mesa.

Expected uses of this mutex are:

- Allowing some OpenGL calls to avoid the share group lock and instead
lock the specific shared object they operate on.
- Replacing SpinLock in the OpenCL implementation (spin-lock in user
space is a bad idea [1])
- Generally anywhere we use std::mutex just to do lock/unlock

Tests based on patch authored by Igor Nazarov <i.na...@samsung.com>

[1]:https://www.realworldtech.com/forum/?threadid=189711&curpostid=189723

Bug: angleproject:8667
Change-Id: I52278c9d19616338c499bbcef6684746caead6ca
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5446558
Reviewed-by: Roman Lavrov <rom...@google.com>
Commit-Queue: Shahbaz Youssefi <syou...@chromium.org>

[modify] https://crrev.com/d9d583bfdc05d3ccbcb4c048fe6693652d89d4ba/src/libGLESv2.gni
[add] https://crrev.com/d9d583bfdc05d3ccbcb4c048fe6693652d89d4ba/src/common/SimpleMutex.cpp
[modify] https://crrev.com/d9d583bfdc05d3ccbcb4c048fe6693652d89d4ba/BUILD.gn
[add] https://crrev.com/d9d583bfdc05d3ccbcb4c048fe6693652d89d4ba/src/common/SimpleMutex_unittest.cpp
[add] https://crrev.com/d9d583bfdc05d3ccbcb4c048fe6693652d89d4ba/src/common/SimpleMutex.h
[modify] https://crrev.com/d9d583bfdc05d3ccbcb4c048fe6693652d89d4ba/src/tests/angle_unittests.gni

Git Watcher via monorail

unread,
Apr 16, 2024, 11:58:11 AM4/16/24
to angleproj...@googlegroups.com

Comment #4 on issue 8667 by Git Watcher: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c4


The following revision refers to this bug:
https://chromium.googlesource.com/angle/angle/+/97cb3eb8a79dcf752a99d0895719fde9f6bb3392

commit 97cb3eb8a79dcf752a99d0895719fde9f6bb3392
Author: Shahbaz Youssefi <syou...@chromium.org>
Date: Tue Apr 16 14:25:49 2024

Split ASSERT and logs into separate header

This is because SimpleMutex.h wants to ASSERT, which was defined in
debug.h. That file has a function that returns a reference to a mutex
that would eventually be changed to SimpleMutex.

The circular dependency cannot be resolved with a forward declaration
with SimpleMutex being defined with `using`.

Bug: angleproject:8667
Change-Id: I9a3acb6d07c6702048b47a72d8411b0fc2166922
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5458631
Reviewed-by: Roman Lavrov <rom...@google.com>
Commit-Queue: Roman Lavrov <rom...@google.com>
Auto-Submit: Shahbaz Youssefi <syou...@chromium.org>

[modify] https://crrev.com/97cb3eb8a79dcf752a99d0895719fde9f6bb3392/src/libGLESv2.gni
[modify] https://crrev.com/97cb3eb8a79dcf752a99d0895719fde9f6bb3392/src/common/debug.h
[add] https://crrev.com/97cb3eb8a79dcf752a99d0895719fde9f6bb3392/src/common/log_utils.h
[modify] https://crrev.com/97cb3eb8a79dcf752a99d0895719fde9f6bb3392/src/common/SimpleMutex.h

Git Watcher via monorail

unread,
Apr 29, 2024, 11:15:11 AM4/29/24
to angleproj...@googlegroups.com

Comment #5 on issue 8667 by Git Watcher: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c5


The following revision refers to this bug:
https://chromium.googlesource.com/angle/angle/+/2eed792ca6de6be32f2d47c06d68d45387cd4bb6

commit 2eed792ca6de6be32f2d47c06d68d45387cd4bb6
Author: Shahbaz Youssefi <syou...@chromium.org>
Date: Mon Apr 15 05:09:57 2024

Vulkan: Use angle::SimpleMutex with async command queue

This change lets ANGLE test the waters with angle::SimpleMutex with
functionality that is currently mostly exercised by tests.

Bug: angleproject:8667
Change-Id: Icf3a021da1f0a2e1c9235ed518bcb9e378b09cfa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5446560
Reviewed-by: Charlie Lao <cc...@google.com>
Commit-Queue: Shahbaz Youssefi <syou...@chromium.org>
Reviewed-by: Roman Lavrov <rom...@google.com>

[modify] https://crrev.com/2eed792ca6de6be32f2d47c06d68d45387cd4bb6/src/libANGLE/renderer/vulkan/CommandProcessor.cpp
[modify] https://crrev.com/2eed792ca6de6be32f2d47c06d68d45387cd4bb6/src/libANGLE/renderer/vulkan/CommandProcessor.h

Git Watcher via monorail

unread,
Apr 30, 2024, 1:51:10 PM4/30/24
to angleproj...@googlegroups.com

Git Watcher via monorail

unread,
May 6, 2024, 2:31:16 PM5/6/24
to angleproj...@googlegroups.com

Comment #7 on issue 8667 by Git Watcher: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c7


The following revision refers to this bug:
https://chromium.googlesource.com/angle/angle/+/c3a1cae44e3571844e22932cfbf62fe96e4d2a22

commit c3a1cae44e3571844e22932cfbf62fe96e4d2a22
Author: Shahbaz Youssefi <syou...@chromium.org>
Date: Mon Apr 15 18:58:55 2024

Use angle::SimpleMutex everywhere in libGLESv2

Only cases left that use std::mutex are:

- Share group and the context ErrorSet mutexes as they need try_lock()
- Anywhere mutexes are used in conjunction with std::condition_variables
(as they explicitly require std::mutex)

Bug: angleproject:8667
Change-Id: Ib6d68938b0886f9e7c43e023162557990ecfb300
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5453294
Reviewed-by: Roman Lavrov <rom...@google.com>

Reviewed-by: Charlie Lao <cc...@google.com>
Commit-Queue: Shahbaz Youssefi <syou...@chromium.org>

[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/image_util/AstcDecompressor.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/SecondaryCommandPool.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/common/debug.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/vk_format_utils.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/MemoryProgramCache.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/BlobCache.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/vk_cache_utils.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/CLProgramVk.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/DisplayVk.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/Context.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/Compiler.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/vk_renderer.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/vk_format_utils.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/Program.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/Suballocation.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/CLPlatformVk.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/Display.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/CLProgramVk.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/vk_utils.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/SecondaryCommandPool.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/capture/FrameCapture.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/Suballocation.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/vk_resource.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/Image.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/Context.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/MemoryTracking.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/vk_renderer.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/SurfaceVk.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/vk_helpers.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/BlobCache.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/Debug.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/BUILD.gn
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/CLMemoryVk.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/Debug.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/vk_helpers.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/d3d/d3d9/ShaderCache.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/CLPlatformVk.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/Display.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/vk_cache_utils.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/capture/FrameCapture.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/common/angleutils.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/common/RingBufferAllocator.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/SurfaceVk.h
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/renderer/vulkan/MemoryTracking.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/common/debug.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/common/RingBufferAllocator.cpp
[modify] https://crrev.com/c3a1cae44e3571844e22932cfbf62fe96e4d2a22/src/libANGLE/Program.cpp

Git Watcher via monorail

unread,
May 9, 2024, 5:21:11 PM5/9/24
to angleproj...@googlegroups.com

Comment #8 on issue 8667 by Git Watcher: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c8


The following revision refers to this bug:
https://chromium.googlesource.com/angle/angle/+/4cacc66e70c49e9b300a63467946bd04fc075b88

commit 4cacc66e70c49e9b300a63467946bd04fc075b88
Author: Shahbaz Youssefi <syou...@chromium.org>
Date: Thu May 09 20:08:58 2024

Remove unused ResourceMap::find

Bug: angleproject:8667
Change-Id: I0d0c00337895b247a1f0536f5072fdcf12b7de1e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5527560
Commit-Queue: Shahbaz Youssefi <syou...@chromium.org>
Reviewed-by: Geoff Lang <geof...@chromium.org>

[modify] https://crrev.com/4cacc66e70c49e9b300a63467946bd04fc075b88/src/libANGLE/ResourceMap.h

Git Watcher via monorail

unread,
May 10, 2024, 2:44:12 PM5/10/24
to angleproj...@googlegroups.com

Comment #9 on issue 8667 by Git Watcher: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c9


The following revision refers to this bug:
https://chromium.googlesource.com/angle/angle/+/d1bb6ed8399dd12e79484f30f9e9ded95c25625a

commit d1bb6ed8399dd12e79484f30f9e9ded95c25625a
Author: Shahbaz Youssefi <syou...@chromium.org>
Date: Fri May 10 04:15:31 2024

Document thread-unsafe iterator access to resource maps

By using a proxy type, everywhere resource maps are iterated are clearly
marked as not being thread safe. In most cases, only destruction and
capture/replay iterate over these maps, which means thread safety is not
an issue (or is externally enforced).

The only case where iterators are used in the presence of other contexts
is with ANGLE_request_extension, which is changed to explicitly require
the application to ensure thread safety. In practice, the user is
Chrome which already guarantees this.

Bug: angleproject:8667
Change-Id: I7af13c6433b6955d9c36f9088b3aa4c065e1cfc1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5526428
Reviewed-by: Charlie Lao <cc...@google.com>

Commit-Queue: Shahbaz Youssefi <syou...@chromium.org>
Reviewed-by: Geoff Lang <geof...@chromium.org>

[modify] https://crrev.com/d1bb6ed8399dd12e79484f30f9e9ded95c25625a/src/libANGLE/ResourceManager.h
[modify] https://crrev.com/d1bb6ed8399dd12e79484f30f9e9ded95c25625a/extensions/ANGLE_request_extension.txt
[modify] https://crrev.com/d1bb6ed8399dd12e79484f30f9e9ded95c25625a/src/libANGLE/ResourceManager.cpp
[modify] https://crrev.com/d1bb6ed8399dd12e79484f30f9e9ded95c25625a/src/libANGLE/ResourceMap.h
[modify] https://crrev.com/d1bb6ed8399dd12e79484f30f9e9ded95c25625a/src/libANGLE/ResourceMap_unittest.cpp
[modify] https://crrev.com/d1bb6ed8399dd12e79484f30f9e9ded95c25625a/src/libANGLE/capture/serialize.cpp
[modify] https://crrev.com/d1bb6ed8399dd12e79484f30f9e9ded95c25625a/src/libANGLE/capture/FrameCapture.cpp
[modify] https://crrev.com/d1bb6ed8399dd12e79484f30f9e9ded95c25625a/src/libANGLE/Context.cpp

Git Watcher via monorail

unread,
May 11, 2024, 2:10:10 PM5/11/24
to angleproj...@googlegroups.com

Comment #10 on issue 8667 by Git Watcher: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c10


The following revision refers to this bug:
https://chromium.googlesource.com/angle/angle/+/4e887491e14a924c8d22a6419af24b613ceb1fa9

commit 4e887491e14a924c8d22a6419af24b613ceb1fa9
Author: Shahbaz Youssefi <syou...@chromium.org>
Date: Sat May 11 18:08:03 2024

Revert "Document thread-unsafe iterator access to resource maps"

This reverts commit d1bb6ed8399dd12e79484f30f9e9ded95c25625a.

Reason for revert: Checking to see if it's the reason
for crbug.com/339948886

Original change's description:

> Document thread-unsafe iterator access to resource maps
>
> By using a proxy type, everywhere resource maps are iterated are clearly
> marked as not being thread safe. In most cases, only destruction and
> capture/replay iterate over these maps, which means thread safety is not
> an issue (or is externally enforced).
>
> The only case where iterators are used in the presence of other contexts
> is with ANGLE_request_extension, which is changed to explicitly require
> the application to ensure thread safety. In practice, the user is
> Chrome which already guarantees this.
>
> Bug: angleproject:8667
> Change-Id: I7af13c6433b6955d9c36f9088b3aa4c065e1cfc1
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5526428
> Reviewed-by: Charlie Lao <cc...@google.com>
> Commit-Queue: Shahbaz Youssefi <syou...@chromium.org>
> Reviewed-by: Geoff Lang <geof...@chromium.org>

Bug: angleproject:8667
Change-Id: I1245c9e57dfeb27a7f0e5718b1455614c70bc0dc
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5532187
Bot-Commit: Rubber Stamper <rubber-...@appspot.gserviceaccount.com>
Commit-Queue: Rubber Stamper <rubber-...@appspot.gserviceaccount.com>
Auto-Submit: Shahbaz Youssefi <syou...@chromium.org>

[modify] https://crrev.com/4e887491e14a924c8d22a6419af24b613ceb1fa9/src/libANGLE/ResourceManager.h
[modify] https://crrev.com/4e887491e14a924c8d22a6419af24b613ceb1fa9/extensions/ANGLE_request_extension.txt
[modify] https://crrev.com/4e887491e14a924c8d22a6419af24b613ceb1fa9/src/libANGLE/ResourceManager.cpp
[modify] https://crrev.com/4e887491e14a924c8d22a6419af24b613ceb1fa9/src/libANGLE/ResourceMap.h
[modify] https://crrev.com/4e887491e14a924c8d22a6419af24b613ceb1fa9/src/libANGLE/ResourceMap_unittest.cpp
[modify] https://crrev.com/4e887491e14a924c8d22a6419af24b613ceb1fa9/src/libANGLE/capture/serialize.cpp
[modify] https://crrev.com/4e887491e14a924c8d22a6419af24b613ceb1fa9/src/libANGLE/Context.cpp
[modify] https://crrev.com/4e887491e14a924c8d22a6419af24b613ceb1fa9/src/libANGLE/capture/FrameCapture.cpp

Git Watcher via monorail

unread,
May 14, 2024, 12:00:12 AM5/14/24
to angleproj...@googlegroups.com

Comment #11 on issue 8667 by Git Watcher: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c11


The following revision refers to this bug:
https://chromium.googlesource.com/angle/angle/+/a1665d2fc335ef1481c76d4066cb2e22bab83ba7

commit a1665d2fc335ef1481c76d4066cb2e22bab83ba7
Author: Shahbaz Youssefi <syou...@chromium.org>

Date: Fri May 10 04:15:31 2024

Reland "Document thread-unsafe iterator access to resource maps"

This is a reland of commit d1bb6ed8399dd12e79484f30f9e9ded95c25625a

The crash was due to another issue (disabling EGL validation in
Chrome)


Original change's description:
> Document thread-unsafe iterator access to resource maps
>
> By using a proxy type, everywhere resource maps are iterated are clearly
> marked as not being thread safe. In most cases, only destruction and
> capture/replay iterate over these maps, which means thread safety is not
> an issue (or is externally enforced).
>
> The only case where iterators are used in the presence of other contexts
> is with ANGLE_request_extension, which is changed to explicitly require
> the application to ensure thread safety. In practice, the user is
> Chrome which already guarantees this.
>
> Bug: angleproject:8667
> Change-Id: I7af13c6433b6955d9c36f9088b3aa4c065e1cfc1
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5526428
> Reviewed-by: Charlie Lao <cc...@google.com>
> Commit-Queue: Shahbaz Youssefi <syou...@chromium.org>
> Reviewed-by: Geoff Lang <geof...@chromium.org>

Bug: angleproject:8667
Change-Id: Id539cabac01df5f242150f6684222577003eef3f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5531278

Reviewed-by: Charlie Lao <cc...@google.com>
Commit-Queue: Shahbaz Youssefi <syou...@chromium.org>
Reviewed-by: Geoff Lang <geof...@chromium.org>

[modify] https://crrev.com/a1665d2fc335ef1481c76d4066cb2e22bab83ba7/src/libANGLE/ResourceManager.h
[modify] https://crrev.com/a1665d2fc335ef1481c76d4066cb2e22bab83ba7/extensions/ANGLE_request_extension.txt
[modify] https://crrev.com/a1665d2fc335ef1481c76d4066cb2e22bab83ba7/src/libANGLE/ResourceManager.cpp
[modify] https://crrev.com/a1665d2fc335ef1481c76d4066cb2e22bab83ba7/src/libANGLE/ResourceMap.h
[modify] https://crrev.com/a1665d2fc335ef1481c76d4066cb2e22bab83ba7/src/libANGLE/ResourceMap_unittest.cpp
[modify] https://crrev.com/a1665d2fc335ef1481c76d4066cb2e22bab83ba7/src/libANGLE/capture/serialize.cpp
[modify] https://crrev.com/a1665d2fc335ef1481c76d4066cb2e22bab83ba7/src/libANGLE/capture/FrameCapture.cpp
[modify] https://crrev.com/a1665d2fc335ef1481c76d4066cb2e22bab83ba7/src/libANGLE/Context.cpp

Git Watcher via monorail

unread,
May 14, 2024, 11:30:13 AM5/14/24
to angleproj...@googlegroups.com

Comment #12 on issue 8667 by Git Watcher: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c12


The following revision refers to this bug:
https://chromium.googlesource.com/angle/angle/+/49317d7332b268b9415e54b1cc611b4bcd9b6a2b

commit 49317d7332b268b9415e54b1cc611b4bcd9b6a2b
Author: Shahbaz Youssefi <syou...@chromium.org>
Date: Fri May 10 20:11:59 2024

Prepare resource map for being potentially thread-safe

Resource maps are used for both shared and context-private resources.
Context-private resource maps do not need any locking. Once glBind* and
similar commands are made free of the share group lock, the resource map
of the corresponding type must be made thread safe, especially for look
up.

This change adds the ability to the resource map to be either thread
safe or not, based on the type of the resource it contains. Currently,
only a test type (unsigned int) is thread safe (used in unit tests).
This is achieved by a combination of the following:

- For resource maps that need a lock, the flat part of the map has an
initially reasonable size, but is _never_ reallocated. This makes
access to that part of the map lockfree.
- The hash-map that contains large ids is always protected by a mutex.

Follow up changes will start enabling thread-safety for resources as
their corresponding glBind command is made lockless.

Bug: angleproject:8667
Change-Id: Ia4ffffee41f021d833d31f296bc883bf12f1135f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5527771
Reviewed-by: Geoff Lang <geof...@chromium.org>

Reviewed-by: Charlie Lao <cc...@google.com>
Commit-Queue: Shahbaz Youssefi <syou...@chromium.org>

Git Watcher via monorail

unread,
May 14, 2024, 1:56:11 PM5/14/24
to angleproj...@googlegroups.com

Comment #13 on issue 8667 by Git Watcher: Make glBind* calls not take the share group lock
https://bugs.chromium.org/p/angleproject/issues/detail?id=8667#c13


The following revision refers to this bug:
https://chromium.googlesource.com/angle/angle/+/f4140c76e2459fefa1a06a3aab7ae0126b2c28b8

commit f4140c76e2459fefa1a06a3aab7ae0126b2c28b8
Author: Shahbaz Youssefi <syou...@chromium.org>
Date: Fri May 10 20:56:13 2024

Remove share group lock from glBindBuffer

This is a very hot function. Removing the share group lock from this
function improves the driver_overhead_2 execution time by ~1ms on Pixel
6.

Bug: angleproject:8667
Change-Id: I9ea04f48aa1d2d0efec21407374393e88a1316e3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5533081
Reviewed-by: Geoff Lang <geof...@chromium.org>
Commit-Queue: Charlie Lao <cc...@google.com>
Auto-Submit: Shahbaz Youssefi <syou...@chromium.org>
Reviewed-by: Charlie Lao <cc...@google.com>

[modify] https://crrev.com/f4140c76e2459fefa1a06a3aab7ae0126b2c28b8/src/libANGLE/Buffer.cpp
[modify] https://crrev.com/f4140c76e2459fefa1a06a3aab7ae0126b2c28b8/src/libANGLE/Buffer.h
[modify] https://crrev.com/f4140c76e2459fefa1a06a3aab7ae0126b2c28b8/src/tests/gl_tests/MultithreadingTest.cpp
[modify] https://crrev.com/f4140c76e2459fefa1a06a3aab7ae0126b2c28b8/src/libANGLE/ResourceMap.h
[modify] https://crrev.com/f4140c76e2459fefa1a06a3aab7ae0126b2c28b8/src/libANGLE/RefCountObject.h
[modify] https://crrev.com/f4140c76e2459fefa1a06a3aab7ae0126b2c28b8/scripts/code_generation_hashes/GL_EGL_entry_points.json
[modify] https://crrev.com/f4140c76e2459fefa1a06a3aab7ae0126b2c28b8/src/libGLESv2/entry_points_gles_2_0_autogen.cpp
[modify] https://crrev.com/f4140c76e2459fefa1a06a3aab7ae0126b2c28b8/scripts/generate_entry_points.py
Reply all
Reply to author
Forward
0 new messages