|
94515733
|
2024-11-27T22:16:44
|
|
Vulkan: Remove release commands from checkOneCommandBatchLocked
This is a follow up for:
Add a new mutex in CommandQueue to protect Vulkan Command Pool
crrev.com/c/angle/angle/+/6020895
`SyncHelper::getStatus()` may call
`CommandQueue::checkOneCommandBatchLocked()` which in turn may call
`releaseFinishedCommandsLocked()` if `mFinishedCommandBatches` is
already full. This requires locking the
`CommandPoolAccess::mCmdPoolMutex` mutex. This may delay API execution
even when "timeout == 0", which is against EGL spec.
Bug: b/362604439
Change-Id: Icf8f3657b65f2e435930adb12266a100dc861a93
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6048803
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
e42047f0
|
2024-10-25T13:50:28
|
|
Vulkan: Disable DescriptorSet cache for SwiftShader
Performance with swiftShader is not critical and cache code path not
making much difference for SwiftShader renderer anyway. This CL disables
descriptor set cache for SwiftShader mainly to ensure the code path gets
test coverage on CI bots. This code path also ensures that we are
tagging ResourceUse on DescriptorSetHelper properly after every use.
Otherwise, it is very hard to test with cache enabled code path since
object usually won't get destroyed due to cache and any bug associated
with this is going to be very hard to debug. This CL has catch such bugs
during the descriptor set cache work.
Bug: angleproject:372268711
Change-Id: Iee1028f9378cf4f537d897e08746d5cf958f225a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6047805
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
09578c42
|
2024-11-27T19:39:09
|
|
Vulkan: Cleanup CommandPoolAccess implementation
This is a follow up for:
Add a new mutex in CommandQueue to protect Vulkan Command Pool
crrev.com/c/angle/angle/+/6020895
Change simplifies `CommandPoolAccess` implementation as well as removes
source of bugs when need to know/remember what method from
`CommandPoolAccess` to use in order to collect/destroy the primary
command buffer.
Additionally, `CommandBatch` converted into a class to avoid invalid
use. The "retire" word replaced with "release" in methods such as
`releaseFinishedCommands()`.
Bug: b/362604439
Change-Id: Iaa72c55458604e5ea8ea5a402e437129a5c9180a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6056019
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
|
|
4b84ee4c
|
2024-12-03T16:21:38
|
|
Vulkan: Implement GL_EXT_EGL_image_storage_compression
Bug: angleproject:352345943
Change-Id: I82a54fa2515254a1045f512818ca23a540cd7a6e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6065464
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
739bcef0
|
2024-12-03T17:58:34
|
|
Vulkan: Rework finishOneCommandBatchAndCleanup
This is a follow up for:
Vulkan: Fix finishOneCommandBatchAndCleanupImplLocked
crrev.com/c/angle/angle/+/6055419
The original `finishOneCommandBatchAndCleanup()` was not optimal in a
sense that it is always finish a batch, when cleaning existing garbage
may be sufficient. Also, because there was no feedback from the
`cleanupGarbage()`, this method may just end up finishing one batch
without cleaning any garbage, causing clients to "think" that there is
no more garbage to clean. Additionally, `cleanupGarbage()` was called
under the `CommendQueue::mMutex` lock, causing uncessary blocking.
This change replaces this method with new `cleanupSomeGarbage()`. It
solves all problems of the original method described above. It no longer
has the `retireFinishedCommandsLocked()` call, because it is not
necessary in scenarios where `cleanupSomeGarbage()` is used.
In order to implement the new method, output feedback parameter was
added to the `cleanupGarbage()` as well as to all methods that it uses.
Bug: b/280304441
Change-Id: I7078899838609a0c3e5edbc4f507c2fe4364380a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6063126
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
|
|
74609065
|
2024-11-27T16:09:44
|
|
Vulkan: Fix finishOneCommandBatchAndCleanupImplLocked
Fix the `finishOneCommandBatchAndCleanupImplLocked()` to always do
cleanup regardless if there is something to finish. This method is
designed not only to free space in `mInFlightCommands` but also to
cleanup already retired commends (in `mFinishedCommandBatches`) and
renderer's garbage. In case if `mInFlightCommands` is empty cleanup was
skipped - which is incorrect.
Change removed `Impl` from the name since it is already have `Locked`.
The `finishOneCommandBatchAndCleanup()` is updated to simply call the
locked version with the mutex lock held.
Change also improved `FixedQueue` assertions (always check that
`mSize <= mMaxSize`).
Bug: b/280304441
Change-Id: I67bd7c35b164b84e9c07306a5bf48b0adefdfa5e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6055419
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
224f836c
|
2024-12-04T09:35:09
|
|
Vulkan: Update setupDispatch comment
The comment was wrong and a source of confusion.
Bug: angleproject:382090958
Change-Id: I7b1a3d5f3b1c86539164d346e320d30b61254f2c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6069354
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
a504b6a2
|
2024-11-25T15:59:05
|
|
Support GL_OES_required_internalformat
Enable GL_OES_required_internalformat GLES extension.
Bug: angleproject:364069034
Change-Id: Ia57548469abff189472aa20b13ca99179c45f2c0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6038448
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Panfeng Hou <panfeng.hou@arm.com>
|
|
104d4e4a
|
2024-11-15T20:44:39
|
|
Vulkan: Improve usage of ErasePipelineCacheVkChunks method
`ErasePipelineCacheVkChunks()` is now also used to erase any possibly
trailing chunks from the current slot. This is done to free blob cache
memory and to avoid parsing these chunks in the future and generating
false-positive "chunk header corrupted" errors.
Normally, new pipeline data is always larger than already saved, but in
case of Vulkan driver update existing data may be ignored, so the cache
data will be generated from scratch. This change will help erase old
data from the blob cache.
Bug: angleproject:42263322
Change-Id: I021abce40c4255b443babed87ed82b273d526ec0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5854708
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
fa70c4cb
|
2024-02-02T13:59:06
|
|
CL/Vulkan: Implement the buffer rect enqueues
This change implements the buffer rect copy using a series of memcopies.
The CL buffer rect doesn't map cleanly to the Vulkan copy buffer
command due to the presence of pitches, and implementing as such will
introduce more barriers in the command stream. For now we do process
this command at call entry point.
Bug: angleproject:379764609
Change-Id: I89a9032a4bbfa48899c448eb131a5ce048e8fd60
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6034035
Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
cc5218af
|
2024-12-02T16:06:10
|
|
ANGLE will crash when the buffer is NULL in eglCreateImageKHR
When creating egl image with android native buffer, and the buffer
pointer is NULL, ANGLE will crash. Because the type of pointer in EGL
and vulkan is different. In EGL, the type of this pointer is
ANativeWindowBuffer, But In vulkan it is AHardwareBuffer, which has an
offset compared with AHardwareBuffer, so it will access invalid address.
Bug: angleproject:379764621
Change-Id: Ifb5d4a81dea85eb23d4e3f82c37f13c7e4809ee5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6061898
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
da292057
|
2024-12-03T10:20:17
|
|
Update third party metadata
Bug: chromium:378273470
Bug: chromium:365321119
Bug: chromium:365320508
Bug: chromium:378273216
Change-Id: Ie24f00112a8f04ff9acdf6e4618b79e082529636
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6062488
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
7adbb3e8
|
2024-11-26T17:06:07
|
|
Vulkan: Remove explicit destroy calls
Since now SharedPtr will automatically call destroy(device) when last
reference goes away, there is no need for explicitly calling
destroy(device) any more.
Bug: angleproject:372268711
Change-Id: I208b17cf7e090babd51d6f337c20fdfd74c75b6b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6052886
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
d81834b6
|
2024-11-26T15:25:35
|
|
Vulkan: Store VkDevice in vk::SharedPtr
So that we don't need to have two versions of destroy() APIs. In
previous CLs I had to add another version of destroy() that does not
take device argument due to SharedPtr may calls destroy when last
reference count goes away. Because we do not have device information at
that time, destroy() API was added but mostly just doing assertion that
Vulkan object has been explicitly destroyed. With this CL, we now stores
device in the SharedPtr so that we no longer need two destroy() APIs.
The explicit destroy(device) call will be removed in the next CL.
Bug: angleproject:372268711
Change-Id: Idcacbc3a922e17ac3d0f6056466b8f3aa084b02e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6052096
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f51170b3
|
2024-11-21T16:30:40
|
|
Enable GL_KHR_texture_compression_astc_hdr
Vulkan supports GL_KHR_texture_compression_astc_hdr,
so this extension can be enabled in Angle.
Bug: angleproject:379186304
Change-Id: I438a120c3f884a7eefcd883ad71abf68f81cb473
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6038457
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b31f367a
|
2024-11-28T16:11:33
|
|
Vulkan: Keep old VVL suppression until roll into Chromium
Bug: angleproject:336652255
Change-Id: Id12e86862cde613cbf3c87557532b2bf23da1838
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6056751
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
e10220f8
|
2024-11-28T18:24:35
|
|
Manual roll vulkan-deps from 3c7156644de7 to 0e28d467e76d (59 revisions)
Manual roll requested by syoussefi@google.com
https://chromium.googlesource.com/vulkan-deps.git/+log/3c7156644de7..0e28d467e76d
Also rolling transitive DEPS:
https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang/+log/1f1ef7560399322558793d91a53b34cdd34f4fe1..0099ed6ad09a78b083c93be9369791dd72cf8a33
https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers/+log/45b314049d6262c850cc873c8f9a30f41a1e0c13..36d5e2ddaa54c70d2f29081510c66f4fc98e5e53
https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools/+log/ea1d8cd9814852428d25d3ea113683a6c9686afb..7d5bc35197be75e10000f14ea9eb3954ca2b0aab
https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers/+log/f864bc6dfe6229a399566e979c16795386d0f308..9dff1f571ce25b92639854b89b28539602b6b97b
https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader/+log/4cd2a86fa6a88abfcf44a7630212fc375fbe0fe5..2534c1e2327990e55f51b8a1f8328085e8e3ff31
https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools/+log/df2ac1bb61f09a80db979d7108adf07b6fe55913..a2224abf350f61211462a33e5b540201fa17de0d
https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Utility-Libraries/+log/c31e717dcd817279e9e90516612f9dbfc84b0e51..b538fb5b08513aa78346cd414ad5e576a2a3e920
https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/fdbdd359fb2bbb50352e84b259171813957d1ee3..b61aa3f59711c9a45e6bac13f70c61dc9e4650c8
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/vulkan-deps-angle-autoroll
Please CC angle-team@google.com,syoussefi@google.com on the revert to
ensure that a human
is aware of the problem.
To file a bug in ANGLE:
https://bugs.chromium.org/p/angleproject/issues/entry
To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Bug: None
Tbr: syoussefi@google.com
Change-Id: Ieecaf46ecf017defffaca78bb003b0b7dcf094f6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6058269
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
01dee1cb
|
2024-10-14T15:04:28
|
|
Add implementation for GL_EXT_texture_storage_compression
Bug: angleproject:352364583
Change-Id: I3dab4c68d5d0206d681e165e991217bd3de8eeb6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6011055
Auto-Submit: Neil Zhang <Neil.Zhang@arm.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
8b7bb82c
|
2024-11-28T13:20:52
|
|
Vulkan: Disable dynamic vertex input state on Qualcomm
Observed bugs on S23.
Bug: angleproject:381384988
Change-Id: I9a8cd754de23f31c4bd1078f0c52f66111a8fc45
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6055889
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
6c1021ec
|
2024-11-22T16:48:45
|
|
Vulkan: Switch DescriptorSetLayout to use AtomicSharedPtr
SharedPtr has better semantics and safer to use. This CL removes direct
exposure of RefCounted object and also allows me to delete
BindingPointer class in later CL.
Bug: angleproject:372268711
Change-Id: I08a0dff3efcf794be843a4a548b9f2609bb9a5e1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6044328
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4aaeffd8
|
2024-11-25T11:33:30
|
|
Metal: Limit simulator texture size to 8k
Regressed in commit d44204893a1725a74cd20b332fbb6f595b0975c3.
Bug: angleproject:380712807
Change-Id: Ic5e298412b35451e87b76f70d5b1b253ed1406cb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6039222
Reviewed-by: Quyen Le <lehoangquyen@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
2dc072ec
|
2024-11-22T16:14:52
|
|
Vulkan: Switch PipelineLayout from AtomicBind* to AtomicSharedPtr
AtomicSharedPtr/SharedPtr has better semantics and safer to use. This
will allow deleting BindingPointer in later CL.
Bug: angleproject:372268711
Change-Id: Ife20f68b2277a1913b06be0de153770214ac964a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6044326
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
87d61997
|
2024-11-21T14:20:55
|
|
Vulkan: Switch ShaderModule to use SharedPtr
This CL gets rid of many vk::RefCounted<vk::ShaderModule> usage which is
risky due to it allows you to direct manipulate reference count. Switch
to vk::SharedPtr manages the reference counting automatically.
Bug: angleproject:372268711
Change-Id: I14f5c509bcbd9ea7d17101637e033652a68710a0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6039117
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
5288ed36
|
2024-11-26T00:00:00
|
|
GL: Enable ANGLE_texture_multisample on OpenGL ES
Trivially enabled on supported device contexts.
Improved readablility of conditions
for implicit GLSL version upgrades.
Fixed: angleproject:381113379
Change-Id: I843f7119da2a3cffb255af97f654d714add9f482
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6055117
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
2e25ea1e
|
2024-11-13T13:59:51
|
|
Add a new mutex in CommandQueue to protect Vulkan Command Pool
Before this change, the CommandQueue::mMutex protects both:
1. Members of CommandQueue class, e.g. mInFlightCommands.
2. Operations on the same command pool and command buffers allocated
from the same command pool.
If one thread accesses resources 1, the other thread is doing operations
in 2, they could be blocked by each other. For example, if thread 1
calls eglClientWaitSync() to check if certain commands finish execution
(accessed resources in 1.), while thread 2 calls
eglMakeCurrent() to flush commands (issue operations in 2.), thread 1
could be blocked by thread 2. This is against the egl spec where
eglClientWaitSync() should return immediately when timeout passed to
the call is 0.
To fix the problem, this change creates a new class CommandPoolAccess
that wraps operations in 2, and protects command pool and command buffer
operations with a new mutex mCmdPoolMutex. With this new mutex, thread 1
and thread 2 would take different locks and not blocked by each other.
Bug: b/362604439
Change-Id: Iccf0ae65809ccb0f593c5e318fde03e89e0c0fa3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6020895
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
239ef680
|
2024-11-21T00:00:00
|
|
Metal: Support ANGLE_texture_multisample
* Added explicit multisample texture creation support
* Added support for SAMPLE_MASK frontend state
* Adjusted Metal backend caps
Fixed: angleproject:380475003
Change-Id: I90250e14da52869cb954b5a61d9c670e958a526c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6048958
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
cecefe53
|
2024-11-21T22:11:17
|
|
Vulkan: Improve recreateSwapchain() error handling
The `WindowSurfaceVk::recreateSwapchain()` method may fail in many
points. After failing, state of `WindowSurfaceVk` may become invalid,
causing undefined behavior.
Invalid state examples:
- Skip adding `cleanupData` into the `mOldSwapchains` while
`mPresentHistory already cleared (resource leak).
- `mSwapchain` may remain `VK_NULL_HANDLE` after the failure.
- `lastSwapchain` may be not retired, causing subsequent swapchain
creation to fail.
Change adds `mLastSwapchain` member to continue tracking last created
swapchain during the `mSwapchain` recreation process until it is
retired. This process now may span multiple API calls. The `mSwapchain`
pointer is invalidated as soon as recreate starts - to indicate that we
do not have usable swapchain and still need to create one.
Notable difference with the old code is that old swapchain and present
history are now collected into the `mOldSwapchains` after new swapchain
is created (or old swapchain is retired in case of a failure). Because
of this, code can now be simplified and easily refactored into a
separate method. The `kMaxOldSwapchains` is now also checked after old
swapchain is collected - this is to prevent resource leak if `finish()`
fails. Added `cleanUpOldSwapchains()` call to reduce a chance of hitting
the `kMaxOldSwapchains` limit.
Change also renamed `presentOutOfDate` parameter where it does not
always make sense. As a side effect, fixed a bug when calling
`prepareForAcquireNextSwapchainImage()` with true, is then replaced
with false in the `computePresentOutOfDate()` call.
Bug: angleproject:380234227
Change-Id: Ie6d85c1b9760cda68c8fc9368235756659a9bdac
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6040159
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f458f865
|
2024-11-12T16:52:42
|
|
Vulkan: Update AcquireNextImageUnlocked() implementation
Main goal of this change is to simplify acquire next image operation
state change tracking.
Key members before this change:
1. `mAcquireOperation.needToAcquireNextSwapchainImage`
2. `unlockedAcquireResult.acquireSemaphore`
Possible states:
1: 2:
false NULL -> image is acquired or no need
true ANY -> need to prepare for and do unlocked ANI
false HANDLE -> need to process ANI result
Only `mAcquireOperation.state` is used after this change.
Possible states:
Ready -> image is acquired or no need
NeedToAcquire -> need to prepare for and do unlocked ANI
NeedToProcessResult -> need to process ANI result
Value of `unlockedAcquireResult.acquireSemaphore` is now only used
as semaphore in the post process and not as boolean, indicating that
result needs processing.
Change adds a lot of ASSERTs to protect from invalid scenarios. In order
for these ASSERTs to work as expected, `deferAcquireNextImage()` is now
called regardless if swapchain is out-of-date or not.
Another functional change is that `postProcessUnlockedAcquire()` does
not mark image as processed at the start and then defers ANI in case of
a failure (so the next ANI fail again), but instead keeps the current
state (NeedToProcessResult) allowing failure to be processed again
without repeating ANI call in case if there will be no swapchain
recreation. State is set to `Ready` only after processing is successful.
Bug: angleproject:42265346
Bug: angleproject:42266579
Change-Id: I4a6a66fa3b6f25a788a8959eff5848b7ec5bdd27
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6018094
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
ea86503c
|
2024-11-20T19:47:49
|
|
Vulkan: Remove vkAcquireNextImageKHR multi-threading support
Currently, it is not possible to call `TryAcquireNextImageUnlocked()`
from multiple threads. However, original implementation added
multi-threading support for future use.
Possible future use:
- First thread (where Surface is current) calls
`eglPrepareSwapBuffersANGLE()` which will call
`TryAcquireNextImageUnlocked()` in the unlocked tail call (without the
share group lock).
- Other thread (where shared Context is current) calls some EGL/GLES
API under the share group lock, that may cause calling
`doDeferredAcquireNextImage()` on the Surface from the first thread.
Calling this method may call `TryAcquireNextImageUnlocked()` under the
share group lock, while it is also called from the first thread in the
unlocked tail call. Calling `doDeferredAcquireNextImage()` may also
cause swapchain recreation.
Taking into account above scenario, current implementation has following
bugs:
1. Possibility to recreate the swapchain from other thread, while first
thread is going to or calling the `TryAcquireNextImageUnlocked()`
function:
a) Other thread may call `prepareForAcquireNextSwapchainImage()`
because `NeedToProcessAcquireNextImageResult()` is still false
until first thread finishes `TryAcquireNextImageUnlocked()` call.
Also, checking `NeedToProcessAcquireNextImageResult()` from other
thread is not thread safe.
b) Other thread finished `TryAcquireNextImageUnlocked()` first, but
with `VK_ERROR_OUT_OF_DATE_KHR` error. First thread still did not
get the chance to call this function because of OS's thread
scheduling delays. Other thread will set
`needToAcquireNextSwapchainImage = true` and will start to
recreate a swapchain. At this time, first thread will start
executing `TryAcquireNextImageUnlocked()`, and because bool is
true - it will actually perform ANI during recreate from other
thread.
2. Possibility to call `TryAcquireNextImageUnlocked()` with old
swapchain. This is similar to (1), but this time call is delayed
after swapchain is recreated.
Since above scenario currently is not possible and the described future
scenario is unlikely to ever happen, instead of fixing above problems
this CL removes the multi-threading support to simplify the code and
make these bugs N/A.
Change removes word "try" from structures, members, and functions
because without multithreading there is no need for that and just adds
unnecessary complication.
It also removes most of the "share group lock" mentions because now this
information is irrelevant and may cause confusion. What is relevant is
that `AcquireNextImageUnlocked()` MUST only be called from a thread
where Surface is current and only CAN access members that is only ever
accessed from this thread (regardless if the lock is taken or not).
For example, if in the future `unlockedAcquireResult` will be accessed
from other thread but with the share group lock held, while
`AcquireNextImageUnlocked()` will still only be called from the current
thread - then this will be a race condition.
Bug: angleproject:42265346
Bug: angleproject:42266579
Change-Id: Ie9be408c0a3b3c1f37ec80727ce5ad2cb8932dad
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6018093
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
9eab301c
|
2024-11-12T17:24:57
|
|
Enable GL_KHR_texture_compression_astc_sliced_3d
ARM supports GL_KHR_texture_compression_astc_sliced_3d,
so this extension can be enabled in Angle.
Bug: angleproject:378507964
Change-Id: I545ac57b4d6065a9ef99a7884555da47a1d50261
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6014004
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
cb31b886
|
2024-11-22T13:15:57
|
|
Vulkan: pruneDefaultBufferPools when there is excessive garbage
What commonly happens with game (and traces) is that we upload a lot of
textures before first frame is drawn. These texture uploads uses a lot
of buffer memory and creates peak memory usage moment if not clean up
quickly. This CL adds back the check if there is excessive suballocation
memory gets destroyed, don't wait until frame boundary to prune empty
buffer blocks. Do the prune immediately so that these memory could be
reused for other purpose for the first frame rendering.
Bug: angleproject:372268711
Change-Id: Ie548245b5ce108be0e2c19b296a28025bface395
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6043405
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
6b9b8239
|
2024-11-21T15:56:40
|
|
Vulkan: fix un-initialized mCompatiblePresentModes
When VK_EXT_swapchain_maintenance1 is supported but
VK_EXT_surface_maintenance1 is not, mCompatiblePresentModes has no
chance to be initialized.
So need to set it up in such case.
Bug: None
Change-Id: I38ac6d9da3d6cebf2effcdcd74084a53d68a32c2
Signed-off-by: Jiawei Gu <gujiawei.will@bytedance.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6040834
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
03380548
|
2024-11-22T11:43:30
|
|
CL/Vulkan: Fix nullptr case for async build task
Bug: angleproject:380411632
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Change-Id: Ib56c6828f59cca0d38b36ae54015c5d464753e21
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6043797
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Austin Annestrand <a.annestrand@samsung.com>
|
|
21d747de
|
2024-11-20T11:54:15
|
|
Vulkan: Use vk::SharedPtr for SharedDescriptorSetCacheKey
This CL switches SharedDescriptorSetCacheKey from using c++
std::shared_ptr to our internal version of vk::SharedPtr. Also get rid
of an extra pointer indirection that SharedDescriptorSetCacheKey is a
reference counted of actual cache key instead of std::unique_ptr of
cache key.
Bug: angleproject:372268711
Change-Id: Id9af5070d24f67711d6decc3a30a260b8d4062d9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6036302
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
8ba71e66
|
2024-06-26T13:37:42
|
|
CL/Vulkan: Update few device caps based on VK caps
-1- Device fence caps flags
The spec requires below fence capabilities to be preset
- CL_DEVICE_ATOMIC_ORDER_RELAXED
- CL_DEVICE_ATOMIC_ORDER_ACQ_REL
- CL_DEVICE_ATOMIC_SCOPE_WORK_GROUP
-2- Add missing param names in program query
The params CL_PROGRAM_SCOPE_GLOBAL_{CTORS,DTORS}_PRESENT are missing
from program query. Adding them.
-3- Set max sampler and image buffer to spec min
Set the max samplers and image buffer size to minimum for now. These
will be changed once the image support is complete.
Bug: angleproject:366412386
Change-Id: Iee2c11319c6c5b2f3a1565e06f1f09c5f770a07c
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6004685
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Austin Annestrand <a.annestrand@samsung.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
8e9dc1a6
|
2024-11-19T11:08:31
|
|
Validate anonymous struct names with namespace
Consider GLSL:
struct { vec4 e; } g;
struct sbbf { vec4 f; };
The struct name validation would fail if user chosen struct name would
clash with a symbol name that ANGLE internally gave to an anonymous
struct.
Fix by importing Name abstraction from MSL backend. A symbol name is
a pair (namespace, string).
Move operator<<(std::ostream &os, const ImmutableString &str)
to sh namespace because that is more natural for operator overloading
name resolution. MSVC works with this.
Bug: angleproject:379758201
Change-Id: Icc9b02aa8cb532e1d925e2fba4c45468f01b9144
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6035029
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
10c2dc7a
|
2024-11-14T10:55:55
|
|
CL: Remove logic restricting CL version of passthrough backend
When the passthrough backend is enabled, the OpenCL version
would be manually set to <= 1.2, causing issues for
workloads that specify the version number.
This change enables OpenCL versions > 1.2 during passthrough.
Bug: angleproject:378754053
Change-Id: I7e84ae7b492d68ba441d0c71b75847799f4b99a0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6022547
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
|
|
a58b35bc
|
2024-08-07T15:01:56
|
|
CL/Vulkan: Implement image creation from buffer object
Add support for creation of image from buffer object for types
image1d_buffer. At the kernel side setup texel buffer descriptor sets
for these kernel arguments.
Bug: angleproject:378103913
Change-Id: I600692cd003b75396afd45dcc93c568bcf390b96
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6005389
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
70d1ef67
|
2024-11-20T11:34:39
|
|
Vulkan: Ensure onFramebufferBoundary is called for offscreen
There is peak memory regression observed from crrev.com/c/6022549. What
I suspect happening is that for offscreen or single buffered case,
glFlush/glFinish is called but bail out because it already submitted or
deferred. So we end up not calling onFramebufferBoundary(). This CL
ensures we always call onFramebufferBoundary from these two functions
for single buffer or offscreen.
Also fixed a bug when onSharedPresentContextFlush is called we may end
up calling onFramebufferBoundary.
To make API names consistent, existing flushImpl() is renamed to
flushAndSubmitCommands() and a new flushIMpl is added to wrap around
most logic inside flush().
Bug: angleproject:372268711
Change-Id: I54eed8a81f4153d52ab962f213cacc87a73b89ac
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6037491
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
0dfe0a75
|
2024-08-30T18:59:54
|
|
CL/VK: Add writeBuffer to staging/transfer routine
Adding enqueueWriteBuffer staging/transfer
code/routine for the non-blocking conditions.
Bug: angleproject:377545840
Change-Id: Ia2f97588a887e9ec30f8f1715b0e33b56ff97867
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6023865
Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
8e0178fb
|
2024-11-19T13:31:45
|
|
Vulkan: Switch SamplerBinding to Use SharedPtr
Another step to remove vk::BindingPointer. SharedPtr is used and
SamplerBinding is renamed to SharedSamplerPtr. This also removed
RefCountedSampler to avoid direct expose of RefCounted<SamplerHelper>
which is risky due to ability of change reference count directly.
Bug: angleproject:372268711
Change-Id: Ia6f352186a4f75ab9ce3396f298e33f70cd61a1b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6036294
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a41b798e
|
2024-11-21T11:07:34
|
|
WebGPU: Ensure mDefaultBindGroup is created
mDefaultBindGroup would not be created if the program has no uniforms
because they are not dirty. Mark all stages as dirty after linking.
Bug: angleproject:376553328
Change-Id: I1663791fa1642be052948c5acb8e403fa8b844f9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6039006
Reviewed-by: Matthew Denton <mpdenton@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
e1fd42db
|
2024-09-02T12:53:22
|
|
CL/Vulkan: Add parent dependencies and image layout transitions
In the case of memory objects derived from parent object, the
dependencies need to be set for parent objects as well. Setting up those
dependencies.
In the case of images, there might be a layout transition needed when
using them. Adding an appropriate barrier command to do layout
transitions.
Also, refactored all the common code of setting up dependencies in a
utility function.
Bug: angleproject:380188569
Change-Id: Ia46f8a7fe647bf38c86f1ea28f99d44b0416c334
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6005390
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
3515113e
|
2024-06-24T15:10:28
|
|
CL/Vulkan: Remove redundant state in CLImageVk
Much of the image state can be queried from the front-end object.
Removing all the redundant state from CLImageVk.
Bug: angleproject:378103913
Change-Id: I7783674da891d1af768375e5d8efd1937c4a4177
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6004687
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
10e073a2
|
2024-06-07T11:04:02
|
|
CL/Vulkan: Capture an event for async build task
Capture an event that could be waited on for the async build events.
Bug: angleproject:378103914
Change-Id: I19fcc20a4fe034a8f0429edd56c84cf3269201ba
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6005392
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
ce53aff0
|
2024-11-05T16:57:57
|
|
Vulkan: Add per descriptorSet LRU cache eviction
Before this CL, the descriptor set cache eviction is at the pool level.
Either the entire pool is deleted or not. It is also not LRU based.
This CL adds a per descriptor set cache eviction and reuse evicted
descriptorSet before allocating a new pool. This eviction is LRU based
so that it is more precise. The mCurrentFrameCount is passed into
various API so that it can make eviction decision based on the frame
number. In this CL, anything not been used in last 10 frames will be
evicted and recycled before allocate a new pool.
Since eviction is based on individual descriptor set, not by pool,
ProgramExecutableVk no longer needs to track the DescriptorSetPool
object. mDescriptorPools has been removed from ProgramExecutableVk
class.
As measured by crrev.com/c/5425496/133 This LRU linked list maintenance
does not add any measurable time difference, but reduces total
descriptorSet pool count by one third (from 75 down to 48).
running test name: "TracePerf", backend: "_vulkan", story:
"batman_telltale"
Before this CL:
cacheMissCount: 200, averageTime:23998 ns
cacheHitCount: 1075445, averageTime:626 ns
descriptorSetEvicted: 0, descriptorSetPoolCount:75
Average frame time 3.9262 ms
After this CL:
cacheMissCount: 200, averageTime:23207 ns
cacheHitCount: 1025415, averageTime:602 ns
descriptorSetEvicted: 102708, descriptorSetPoolCount:48
Average frame time 3.9074 ms
BYPASS_LARGE_CHANGE_WARNING
Bug: angleproject:372268711
Change-Id: I84daaf46f4557cbbfdb94c10c5386001105f5046
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5985112
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
17904b43
|
2024-11-19T16:37:43
|
|
Vulkan: Restrict EGL_ANDROID_front_buffer_auto_refresh support
Original functionality supported scenario
where `VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR` and
`VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR` modes may be
incompatible, requiring a call to `deferAcquireNextImage()` method in
order to cause swapchain recreation without swap.
The `eglSurfaceAttrib()` may be called from any thread, this means that
`deferAcquireNextImage` may be also called from any thread - which is
not thread safe.
This CL restricts exposing the extension only when
VK_EXT_swapchain_maintenance1 extension is also supported, where
present modes expected to be compatible on Android, so no need for
swapchain recreation and therefore - `deferAcquireNextImage()` call.
Not requiring to call `deferAcquireNextImage()` improves thread safety
of `WindowSurfaceVk::setAutoRefreshEnabled()` method.
There is still race condition accessing `mDesiredSwapchainPresentMode`
but it will be addressed in a separate CL.
Bug: angleproject:42265697
Bug: angleproject:379762019
Change-Id: I4631c736188eb52a5476e1a2bed3439d49cf12d4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6035187
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
c4ec8dbb
|
2024-11-19T17:01:42
|
|
Vulkan: Expose EGL_ANDROID_front_buffer_auto_refresh
Original CL implemented the functionality without exposing the
corresponding extension.
This CL exposes the extension on Android and adds necessary validation.
Bug: angleproject:42265697
Change-Id: Ia01c68f04c41a850e531aa7b889de9e561f3a9db
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6035186
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
74f74b63
|
2024-11-14T10:07:34
|
|
Vulkan: Add ContextVk::onFramebufferBoundary() function
This makes a more formal API to track frame boundary. Also adds a
uint32_t mCurrentFrameCount to track the total number of frames rendered
so that we could use for heuristic purpose.
Bug: angleproject:372268711
Change-Id: I153497403ed0d8fde18f1786186ce600df60c514
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6022549
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
087cc411
|
2024-11-14T11:05:14
|
|
Vulkan: Add mRenderer to ShareGroupVk class
For convenience, instead of passing renderer to shareGroupVk's API, keep
mRenderer in SharGroupVk class at constructor call.
Bug: angleproject:372268711
Change-Id: I9534f7dbe24121856221b89ccf8fc6a353bbb0cc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6022548
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
d2e543c7
|
2024-11-18T14:21:28
|
|
Vulkan: Consider PowerVR hardware coherent for framebuffer fetch
Bug: angleproject:377923479
Change-Id: I5a51b0d82e55c6153dfcaa240aa08456560f2c7b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6032832
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
987cc0de
|
2024-08-06T12:16:37
|
|
Vulkan: Add release utility for BufferViewHelper
Add a release helper that doesn't require ContextVk for
BufferViewHelper.
Bug: angleproject:378103913
Change-Id: Ib468d152501ecaec1dd71c9c6ed5527b73a1afa5
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6004686
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
743dd7bf
|
2024-11-06T12:29:36
|
|
CL: Add some event/memory helper functions
Add the following helper functions on the CL frontend
- check for user event
- check for CL image/buffer types
And on the VK backend
- For CLBufferVk/CLImageVk much of the state is encoded in the
front-end object. Add utility functions to get handle to them.
- check for user event dependency in commandqueue
Bug: angleproject:378103912
Change-Id: Ie76b44445ce2db3b5a49ccc6afe02e75c474875d
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6004683
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
518e162e
|
2024-11-15T00:07:14
|
|
Fix validation for 3D depth/stencil textures
They should fail with GL_INVALID_OPERATION:
> Textures with a base internal format of DEPTH_COMPONENT, DEPTH_STENCIL
> or STENCIL_INDEX are supported by texture image specification
> commands only if target is TEXTURE_2D, TEXTURE_2D_MULTISAMPLE,
> TEXTURE_2D_ARRAY, TEXTURE_2D_MULTISAMPLE_ARRAY, TEXTURE_CUBE_MAP or
> TEXTURE_CUBE_MAP_ARRAY. Using these formats in conjunction with any
> other target will result in an INVALID_OPERATION error.
Bug: angleproject:379674017
Change-Id: Icdd4cea24601f6744a3a85bdf8ef07946569a16f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6019830
Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
15492c9b
|
2024-11-15T15:59:54
|
|
Vulkan: A few workarounds for older ARM drivers
Bug: angleproject:379269831
Change-Id: I16d2eb6074bf595f19561316b2c6b7854119b4b6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6022180
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
9dd69aae
|
2024-11-15T15:05:09
|
|
Vulkan: Disable dynamic rendering on PowerVR
Use of dynamic rendering is proving to be too slow
on PowerVR devices, so we need to disable it.
We can re-enable in the future if ANGLE or driver
fixes improve it.
Test: restricted_trace_perf
Bug: b/372273294
Change-Id: I3b643dbc5ddcb8217275f624cfc5f5128f6b061c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6026793
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
e3b3dd68
|
2024-11-14T23:00:52
|
|
Vulkan: Optimize color clears vs read-only depth/stencil switch
When switching to read-only depth/stencil mode, if the aspect that
intends to be in read-only mode has a deferred clear, the clear is
flushed separately beforehands (as that would be a write operation).
Prior to this change, _all_ deferred clears were flushed for simplicity.
In this change, only the aspect that is switching modes is cleared,
leaving the other aspects free to be optimized as loadOp of the
following render pass.
Bug: angleproject:378058737
Change-Id: Iba4371590bee99f5022575c09b0d32231562488c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6019829
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
adb80cbb
|
2024-11-12T22:38:38
|
|
Vulkan: Optimize read-only depth/stencil switch after clear
Prior to this change, if color is cleared then read-only depth/stencil
mode is enabled, ContextVk::switchToReadOnlyDepthStencilMode eagerly
flushed the deferred clears (starting a render pass).
However, if the render pass is marked dirty for any reason afterwards,
for example because we want to flush the render pass after a query
ends, the render pass that is just started above is unnecessarily
closed.
In this change, `switchToReadOnlyDepthStencilMode` only detects if a new
render pass is needed and marks the appropriate dirt bits. This way,
the render pass can only be restarted once.
Bug: angleproject:378058737
Change-Id: I83a5ebae6c223882eafea338eeec19895d87e5c1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6023414
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
2babbbd2
|
2024-11-14T14:14:38
|
|
Add egl config support GL_RGB10_A2 for Linux Headless
This patch add egl config support GL_RGB10_A2 for Linux Headless,
optionally add GL_RGB10_A2 after checking it's renderable.
Bug: angleproject:377349381
Change-Id: I16943c74161d18399040fcbe2f1c7a80988dac8a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6021860
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
29855942
|
2024-11-06T16:01:28
|
|
Vulkan: Add stubs for expose VK_EXT_image_compression_control
Bug: angleproject:352364583
Change-Id: Ia8292eee6620db6d0c4b0c6162de95583c1e416d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5998011
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
ba81145f
|
2024-11-08T15:45:44
|
|
Vulkan: Emulate coherent framebuffer fetch everywhere
Many apps expect coherent framebuffer fetch to be available, and
multiple downstream emulators end up forcing coherent framebuffer fetch
enabled despite the hardware not being coherent.
This change attempts to do a best-effort emulation of coherent
framebuffer fetch by automatically inserting barriers before framebuffer
fetch draws. While this doesn't correctly handle self-overlapping
geometry, it works well enough in practice for the applications.
As a result, framebuffer fetch is practically enabled everywhere after
this change.
Bug: angleproject:377923479
Change-Id: I3900a1de0f4db755b7e70871f57df3ea112073f9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6004336
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
0dc407dc
|
2024-06-25T11:49:25
|
|
CL/Vulkan: Address slicePitch and rowPitch issues in images
* Based on spec, the slicePitch >= the row pitch for 1D array
* Validation should check if slicePitch >= rowPitch * region[1] for
2D array and 3D images
* The row pitch should be based on region rather than image extent
for the host copy
* Offset in staging buffer is modified to be based on row and slice
pitch
* Returned row and slice pitch for clEnqueueMapImage is updated to
be based on image's extent since mapped staging buffer is utilized
Tests-Passing: OCLCTS.test_basic imagereadwrite,
OCLCTS.test_basic imagereadwrite3d,
OCLCTS.test_basic enqueue_map_image,
OCLCTS.test_cl_fill_images use_pitches
Bug: angleproject:42266936
Change-Id: I0f9bc5c576167bbdcdde467773f8159eb7bddb99
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6014983
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Rafay Khurram <r.khurram@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b9932271
|
2024-06-18T16:38:28
|
|
CL/Vulkan: Add handling for NormalizedSamplerMaskPushConstant
* Includes code for parsing reflection data and adding push constant
* Creates a new sampler that is normalized to conform with constant
* Fixed pointer returned in getImageDataChannelOrderRange/DataTypeRange
Tests-Passing: OCLCTS.test_basic readimage3d,
OCLCTS.test_basic readimage3d_fp32,
OCLCTS.test_basic readimage3d_int16
Bug: angleproject:42266936
Change-Id: I6390193401c0c0411df87d9f61c917c8df7918d3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6016821
Commit-Queue: Rafay Khurram <r.khurram@samsung.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
aaf07534
|
2024-06-14T03:07:12
|
|
CL/Vulkan: Fix clEnqueueUnmapMemObject for host ptr image cases
* For CL_MEM_USE_HOST_PTR case, host ptr has to be utilized in unmap.
Tests-Passing: OCLCTS.test_cl_fill_images use_pitches 1D,
OCLCTS.test_cl_fill_images use_pitches 1Darray,
OCLCTS.test_cl_fill_images use_pitches 2D,
OCLCTS.test_cl_fill_images use_pitches 2Darray,
OCLCTS.test_cl_fill_images use_pitches 3D
Bug: angleproject:42266936
Change-Id: I8fd3cd91fea61283ad5c28c1a7040d43310a0345
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5987534
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Rafay Khurram <r.khurram@samsung.com>
|
|
08ce5672
|
2024-06-11T17:28:34
|
|
CL/Vulkan: Add pitches handling for image APIs
* Changes applied to clCreateImage, clEnqueueReadImage,
and clEnqueueWriteImage
* Involved performing CPU copies to/from the staging buffer
with pitch factored in
Tests-Passing: OCLCTS.test_cl_read_write_images use_pitches 1Darray,
OCLCTS.test_cl_read_write_images use_pitches 2D,
OCLCTS.test_cl_read_write_images use_pitches 2Darray,
OCLCTS.test_cl_read_write_images use_pitches 3D,
OCLCTS.test_cl_fill_images 2D,
OCLCTS.test_cl_fill_images 3D,
OCLCTS.test_cl_fill_images 1Darray,
OCLCTS.test_cl_fill_images 2Darray
Bug: angleproject:42266936
Change-Id: I9d5bbecb9d83b2138b40e40e23a22218e497dcd0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5987702
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Rafay Khurram <r.khurram@samsung.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c5242b6f
|
2024-06-03T00:40:05
|
|
CL/Vulkan: Add extent, offset, and layers handling for arrays
* Sets the array layer count to appropriate value
* For 1D/2D array, base layer is equivalent to the y/z origin
* For 1D/2D array, offsets and extents should be set to 0/1 for
unused dimensions
Tests-Passing: OCLCTS.test_cl_copy_images 1Darray,
OCLCTS.test_cl_copy_images 2Darray,
OCLCTS.test_cl_copy_images 2Darrayto2D,
OCLCTS.test_cl_copy_images 2Darrayto3D,
OCLCTS.test_cl_copy_images 2Dto2Darray,
OCLCTS.test_cl_copy_images 3Dto2Darray,
OCLCTS.test_cl_copy_images max_images 1Darray,
OCLCTS.test_cl_copy_images max_images 2Darray,
OCLCTS.test_cl_copy_images max_images 2Darrayto2D,
OCLCTS.test_cl_copy_images max_images 2Darrayto3D,
OCLCTS.test_cl_copy_images max_images 2Dto2Darray,
OCLCTS.test_cl_copy_images max_images 3Dto2Darray,
OCLCTS.test_cl_copy_images small_images 1Darray,
OCLCTS.test_cl_copy_images small_images 2Darray,
OCLCTS.test_cl_copy_images small_images 2Darrayto2D,
OCLCTS.test_cl_copy_images small_images 2Darrayto3D,
OCLCTS.test_cl_copy_images small_images 2Dto2Darray,
OCLCTS.test_cl_copy_images small_images 3Dto2Darray,
OCLCTS.test_cl_read_write_images 1Darray,
OCLCTS.test_cl_read_write_images 2Darray,
OCLCTS.test_cl_read_write_images max_images 2Darray
Bug: angleproject:42266936
Change-Id: I5ffb792c640c536045450ad6583d8d3bc0358d64
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5987532
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Rafay Khurram <r.khurram@samsung.com>
Commit-Queue: Rafay Khurram <r.khurram@samsung.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
52831fc0
|
2024-05-30T02:28:11
|
|
CL/Vulkan: Add handling for image push constants
Tests-Passing: OCLCTS.test_kernel_image_methods 1D,
OCLCTS.test_kernel_image_methods 2D,
OCLCTS.test_kernel_image_methods 3D,
Bug: angleproject:42266936
Change-Id: Ie0c488ec02047a4a3da387c32178d05397c9d174
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5987700
Commit-Queue: Rafay Khurram <r.khurram@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
e557b60e
|
2024-05-28T17:40:49
|
|
CL/Vulkan: Add destruction of staging buffer for CLImageVk
* Staging buffer wasn't being destroyed leading to a memory leak.
Tests-Passing: OCLCTS.test_cl_fill_images 3D,
OCLCTS.test_cl_fill_images max_images 3D,
OCLCTS.test_cl_copy_images 3D,
OCLCTS.test_cl_copy_images max_images 3D,
OCLCTS.test_cl_copy_images small_images 3D,
OCLCTS.test_cl_copy_images 2Dto3D,
OCLCTS.test_cl_copy_images max_images 2Dto3D,
OCLCTS.test_cl_copy_images small_images 2Dto3D,
OCLCTS.test_cl_copy_images 3Dto2D,
OCLCTS.test_cl_copy_images max_images 3Dto2D,
OCLCTS.test_cl_copy_images small_images 3Dto2D
Bug: angleproject:42266936
Change-Id: I2526eb994563f20b8e8f352d303957e768a3bde0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5987531
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Rafay Khurram <r.khurram@samsung.com>
|
|
485f6c34
|
2024-05-24T03:06:31
|
|
CL/Vulkan: Implement clEnqueueFillImage
* Packs fillColor values, copies image to staging buffer,
fills the relevant pixels in mapped staging buffer,
and then copies back to image
Tests-Passing: OCLCTS.test_cl_fill_images 1D,
OCLCTS.test_cl_fill_images max_images 1D
Bug: angleproject:42266936
Change-Id: I2ceb98830f49318edb71a1be14cecfdb4476d7ff
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5961949
Commit-Queue: Rafay Khurram <r.khurram@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
bf07bcb7
|
2024-11-11T17:23:43
|
|
Vulkan: Remove dead code since mSwapchainImages always valid
All elements of the `mSwapchainImages` always contain valid images.
This fact makes code calling `acquireNextSwapchainImage()` in the
`WindowSurfaceVk::lockSurface()` a dead code. Probably, instead of
`acquireNextSwapchainImage()` it should call
`doDeferredAcquireNextImage()` if `needsAcquireImageOrProcessResult()`
is true, but this is another issue. This CL simply removes a dead code.
Bug: angleproject:42264593
Bug: angleproject:42262606
Change-Id: Ic7bda330d74e1ccad149ffab723954f45dab700b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6018092
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a402f9cb
|
2024-11-11T15:08:41
|
|
Metal: Do not use number digit separator in .mm
The review system turns ' to strings for Obj-C
syntax highlighting.
Bug: angleproject:378421872
Change-Id: I201f6561def7c4b945f37e3e02ec0b8915954e8e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6011209
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
eb614d7e
|
2024-11-11T13:24:35
|
|
Metal: Avoid leaking library and binary sources
Reland: Fix build with
metal_internal_shader_compilation_supported = false
Fix leak of dispatch_data during binary load. The dispatch object
was not released. Dispatch objects are Obj-C objects, so hold with
AutoObjCPtr.
Fix leak of MTLLibrary objects when creating the objects.
The method newLibraryWithData returns +1 due to being "new" type
method. This ref must be adopted.
Avoid using autoreleased objects, use AutoObjCPtr.
Some leaks regressed in commit c5ab1cebccaab0f8de466e5f797faa3d5a84bea5.
Bug: angleproject:351165323
Change-Id: I08bc6bcb787cdc3f71e9487d80a44e24b01b6b4c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6017845
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
b2d84a66
|
2024-11-12T20:14:48
|
|
Revert "Metal: Avoid leaking library and binary sources"
This reverts commit 6359ec111595c57e6be04b0468ca866f91593f2f.
Reason for revert: https://chromium-review.googlesource.com/c/angle/angle/+/6011208/comments/c1453ef2_2c6a5e49
Original change's description:
> Metal: Avoid leaking library and binary sources
>
> Fix leak of dispatch_data during binary load. The dispatch object
> was not released. Dispatch objects are Obj-C objects, so hold with
> AutoObjCPtr.
>
> Fix leak of MTLLibrary objects when creating the objects.
> The method newLibraryWithData returns +1 due to being "new" type
> method. This ref must be adopted.
>
> Avoid using autoreleased objects, use AutoObjCPtr.
>
> Some leaks regressed in c5ab1cebccaab0f8de466e5f797faa3d5a84bea5.
>
> Bug: angleproject:351165323
> Change-Id: If23859fbddd21693d923f66f6fb015eed494f06e
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6011208
> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
> Commit-Queue: Geoff Lang <geofflang@chromium.org>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Note: the revert merges the changes of https://crrev.com/c/6011902
Bug: angleproject:351165323
Change-Id: Iec1a14c8043e0883190723edf7302127c27f2de4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6013090
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4a835cf2
|
2024-11-01T13:31:00
|
|
WebGPU: send uniforms to GPU for use in shader
Basic uniforms should now be accessible in the shader during a draw
call, rather than just via glGetUniform*().
This is unoptimized and creates a new GPU-side copy of all the uniforms,
every time any uniform changes.
This sets up the bind group layout for a pipeline and sets the bind
groups in the renderer pass. Right now these bind groups only contain
the default uniform blocks, but in the future will need to contain
textures, samplers, and non-default uniform blocks (UBOs).
Bug: angleproject:376553328
Change-Id: I50891b81ab2ee374d674213257f76319c0222120
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5980972
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Liza Burakova <liza@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
267a3daf
|
2024-11-05T19:51:58
|
|
CL/Vulkan: Use enums for cmd exec status instead of bools
Setup the `createEvent()` interface to take the initial state of the
event using an enum, instead of boolean for better readability.
Bug: angleproject:377997556
Change-Id: Ib5a23cf2034e61e90b345bb432af59d96338b707
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6004063
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
f5b9e0ed
|
2024-11-11T16:06:30
|
|
Metal: Query MSL print env var with bool getter
Use angle::GetBoolEnvironmentVar.
Bug: angleproject:378404988
Change-Id: I45778690e215325e9e4eb67c6feefa9b17941f49
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6011902
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
e5619a5c
|
2024-10-15T18:27:00
|
|
Use EGL sync global lock for all EGL*sync entrypoint calls
To free EGL sync operations from waiting for other EGL calls
to finish, we use a separate global lock for EGL*sync entrypoints.
Below angle::SimpleMutex are added to protect resources that may
have race condition due to being accessed by EGL*sync calls
and non EGL*sync calls at the same time:
1. Display::mContextMapMutex that protects Display::mState.contextMap
2. static angle::base::NoDestructor<angle::SimpleMutex>
anglePlatformDisplayMapMutex that protects static
angle::base::NoDestructor<ANGLEPlatformDisplayMap> displays
3. static angle::base::NoDestructor<angle::SimpleMutex>
devicePlatformDisplayMapMutex that protects static
angle::base::NoDestructor<DevicePlatformDisplayMap> displays
EGL_Terminate() entry point takes both global lock and
global egl sync lock. This is to protect Display::mSyncMap,
Display::mSyncPools, and Display::mSyncHandleAllocator being
get cleared by thread 1 calling eglTerminate, while they are
still accessed by thread 2 through a call such as eglCreateSync.
So that we won't have thread 2 finish validating the sync object with
syncID exists in Display::mSyncMap, but then find the
mSyncMap.find(syncID) returns a nullptr due to the mSyncMap
is cleared by thread 1. Same applies to EGL_LabelObjectKHR(),
EGL_ReleaseThread(), ThreadCleanupCallback().
EGL_Initialize() writes to Display::mInitialized. This is read
by EGL Sync API validation functions. EGL_Initialize() also takes
both global lock and global sync lock to prevent race conditions
between EGL_Initialize() and EGL Sync APIs.
When ANGLE_CAPTURE_ENABLED is enabled, fall back to global lock,
as the CaptureEGLCallToFrameCapture() touches many resources
(e.g. mMaxAccessedResourceIDs, mFrameCalls)
that could lead to race conditions without a global lock.
Bug: b/362604439
Change-Id: Ic0d54a4cd66743bcd0f48f41f247dd223cff2f5e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5933570
Reviewed-by: Roman Lavrov <romanl@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Igor Nazarov <i.nazarov@samsung.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
f198e807
|
2024-10-16T17:47:17
|
|
CL/VK: Serialize cmds when queue profiling enabled
When queue profiling is enabled by user (opt-in)
we should serialize/finish each cmd.
Bug: angleproject:377942756
Change-Id: I7809df073c0a6de0e4d5338bec2fa2032ebc1577
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6003807
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
|
|
ac41a84a
|
2024-10-10T17:35:20
|
|
CL/VK: Fix reflection parsing out-of-order cases
Some clspv generated binaries cause the SPIR-V Tools
parser to parse reflection instructions out-of-order
(with respect to what we see in disassembler dump).
This fix addresses kernel and kernel args so that
order does not matter anymore.
Bug: angleproject:377941117
Change-Id: I75da428b6f0a9f155f3faf5db7a0408485d4ebdc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6003806
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
a4172290
|
2024-10-08T13:20:40
|
|
CL/VK: Initial impl for migrateMemObjects
Defer migration handling in multi-device setups.
Allow API to return error-free on 1 device cases (nop) for now.
Bug: angleproject:377942759
Change-Id: I9bcc238ad4d2965e1281a99ec2782e8cfe6c05a6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6003805
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
152f8035
|
2024-10-29T14:14:03
|
|
CL/VK: Fix missing default device on contextFromType
Bug: angleproject:377941119
Change-Id: Ia75184233a5b0b422425626cbce46a2105b08249
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6003463
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
de287909
|
2024-08-30T18:38:40
|
|
CL/VK: Generalize host transfer sync utility
Rework host transfer sync utility to handle
multiple non-blocking enqueue transfer ops
for buffer/image reads.
Bug: angleproject:377545840
Change-Id: Ic382162ded15cb15c900baf724e02592bfd846c9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6001611
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
|
|
6359ec11
|
2024-11-11T13:24:35
|
|
Metal: Avoid leaking library and binary sources
Fix leak of dispatch_data during binary load. The dispatch object
was not released. Dispatch objects are Obj-C objects, so hold with
AutoObjCPtr.
Fix leak of MTLLibrary objects when creating the objects.
The method newLibraryWithData returns +1 due to being "new" type
method. This ref must be adopted.
Avoid using autoreleased objects, use AutoObjCPtr.
Some leaks regressed in c5ab1cebccaab0f8de466e5f797faa3d5a84bea5.
Bug: angleproject:351165323
Change-Id: If23859fbddd21693d923f66f6fb015eed494f06e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6011208
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
7fea539c
|
2024-10-23T11:40:51
|
|
Vulkan: Remove extra non-conformant flag checks
It may be possible to remove the flag check and simply rely on the
checks performed in CanSupportGLES32() to determine support for ES 3.2.
The non-conformant flag can remain utilized for certain features until
the relevant issues are resolved and this flag is no longer needed.
* Removed the checks from getMaxConformantESVersion().
* Removed the flag check in Renderer::getMaxSupportedESVersion().
* Added exception to the blend extension when using the non-conformant
flag for Win/Intel.
* Skipped the related tests on this platform that now fail.
* Added a new feature flag to force-enable ES 3.2 on certain platforms
for testing.
* exposeES32ForTesting
* If the bots are updated to support ES 3.2, it can be removed from
using this flag.
* Skipped some VVL errors when the flag is enabled.
* Skipped end2end ES 3.2 tests on SwS.
* Skipped some dEQP tests on P4 and SwS that would use ES 3.2 features
that are not available on those platforms.
Bug: b/374841339
Bug: b/376899587
Change-Id: Ifd405457ab8bf2076eb8fb5c92c5316f4d520595
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5958147
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
f44427b5
|
2024-11-05T15:18:59
|
|
Vulkan: Fix MSAA glReadPixels into PBOs
The temporary image used to resolve the MSAA framebuffer during
glReadPixels did not have the SAMPLED usage bit. Additionally, the
image was supposed to be garbage collected afterwards but ImageHelper's
release() function was accidentally immediately destroy()ing it.
This was not an issue with blocking glReadPixels paths, because the
command buffer was immediately flushed and the GPU work was waited on
before the image was destroyed in RendererScoped's destructor.
Bug: b/377437834
Change-Id: I1dca47172d6f363277059a848fe9446ac2a872d4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5995530
Commit-Queue: Charlie Lao <cclao@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
644b91f7
|
2024-02-29T16:37:37
|
|
CL/Vulkan: Implement buffer map/unmap
Implement the buffer map, for now mapping is performed at the call site.
Bug: angleproject:42267077
Change-Id: I16929920be8a49863de514b541ff0a57b6ac4453
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5971713
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d4420489
|
2024-10-25T08:53:17
|
|
Add check for iOS simulator when initializing caps in metal
On Intel-arch MacBook, the system API
[supportsFamily:MTLGPUFamilyApple3] returns false on the iOS
simulator, causing maxVertexOutputComponents to be set to 60,
which is below than the required value of 64, resulting in
WebGL2 initialization failure on chromium iOS.
Add a TARGET_OS_SIMULATOR check to ensure the values of caps can be
set correctly in the siumulator environment.
Bug: angleproject:375244081
Change-Id: Iafc44a2aa62130b09127bbec7ea6940506a4165c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5961039
Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
6df20e5f
|
2024-08-21T13:29:36
|
|
CL/VK: Add missing HostPtr-BufferVk sync on unmap
Missing extra copy/sync for enqueueUnmapMemObject
routine for USE_HOST_PTR scenario.
Bug: angleproject:377366930
Change-Id: Ifcb0ed58beabf5870e00ed47b36cfd08767eba70
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5990104
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
2a569b2b
|
2024-11-04T11:41:29
|
|
Vulkan: Document that hex can be viewed with spirv-dis
Since https://github.com/KhronosGroup/SPIRV-Tools/pull/5870, spirv-dis
is able to disassemble SPIR-V given a hex stream. This change indicates
this when retrieving shader debug info (a WebGL extension).
Bug: angleproject:42266948
Change-Id: Ifab4668d6608093700d3e03ddd7ea675fd2bcf42
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5988173
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
17a01469
|
2024-10-26T06:07:31
|
|
Vulkan: Bugfix TextureVk::generateMipmap
Add support for generating mipmaps of textures that are EGLImage
texture targets with colorspace overrides
Bug: angleproject:40644776
Tests: ImageTestES3.SourceAHBTarget2DGenerateMipmap*
Change-Id: I9b4ff802f4118a42d54dc8d80ab30e2f9958bfee
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5966623
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
e2cd9082
|
2024-11-05T04:07:17
|
|
Vulkan: Bugfix in setCurrentImageLayout
Make sure to update mLastNonShaderReadOnlyLayout and
mCurrentShaderReadStageMask when updating the current layout.
Bug: angleproject:40644776
Change-Id: Ie8652099a0d4caca9f9aea5bac38256a513b08e7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5992020
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
7483897c
|
2024-10-01T17:23:37
|
|
CL/Vulkan: Add numeric versioning for extensions
With extended versioning support, the version number of extensions need
to be reported as well. Using the numeric versioning mode for adding
supported extensions.
Also, fix the version number for cl_khr_icd and
cl_khr_extended_versioning extensions.
Bug: angleproject:372085147
Change-Id: I7bf3157227f9579c69c351a63a88b92be7f07d71
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916159
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
9ce9e678
|
2024-04-16T10:07:02
|
|
CL/Vulkan: Set storage buffer usage for cl buffers
clspv is setting all the buffer objects as storage buffers, so removing
the distinction on the CL MEM flags for now.
Bug: angleproject:365694588
Change-Id: I3bd65457d53a6a2fb5fd5c8f2a0b8c25094ed563
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916158
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
2f8ad9c1
|
2024-09-26T20:34:34
|
|
CL/Vulkan: Add support for sub-buffer creation
Sub-buffer is setup to point to offset location of the parent buffer.
The copy buffer interface is updated to account for copies from the same
sub-buffer.
Bug: angleproject:372157566
Change-Id: I668c7182a8c4c12e265115f1c28d9bfbfe562bb0
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916156
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3c1e98a3
|
2024-05-22T01:46:52
|
|
CL/Vulkan: Fix clEnqueueMapImage/clEnqueueUnmapMemObject
* Updates slice_pitch and row_pitch parameters with relevant
values according to the spec.
* For mapping, image is copied to staging buffer, then copied
to dynamically allocated array
* For unmapping, the reverse is done with the array being freed
Tests-Passing: OCLCTS.test_cl_copy_images 2D,
test_cl_copy_images small_images 2D, test_cl_copy_images max_images 2D,
test_cl_copy_images 3D, test_cl_copy_images small_images 3D,
test_cl_copy_images max_images 3D,
Bug: angleproject:42266936
Change-Id: I0cd778244832ce66e72a58a228ed889a9002171e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5961948
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Rafay Khurram <r.khurram@samsung.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
2b8d6bbe
|
2024-11-01T11:23:35
|
|
Vulkan: Use UpdateFullTexturesDescriptorSet when cache missed
DescriptorSetDescBuilder::updateDescriptorSet() relies on the cache key
to build descriptorSet. UpdateFullTexturesDescriptorSet() builds
descriptorSet directly from state, it does not use cache key. Test shows
UpdateFullTexturesDescriptorSet is much faster than
updateActiveTexturesForCacheMiss and updateDescriptorSet pair. This CL
removes updateActiveTexturesForCacheMiss() function and uses
UpdateFullTexturesDescriptorSet for cache miss case.
The timing code is added around the cache miss functions to measure the
time.
Old:
asphalt_9 average 7,554 nanosec
gl_driver2_off: 20,354 nanosec
batman_telltale: 12,992 nanosec
New:
asphalt_9 average 916 nanosec
gl_driver2_off: 1,839 nanosec
batman_telltale: 3,437 nanosec
Bug: angleproject:372268711
Change-Id: I176d67ed732c3fe3a18a079df7c4973aa926087a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5984893
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
fbe34df7
|
2024-10-29T16:19:29
|
|
Vulkan: More texture descriptorSet code cleanup
Removed unused argument `pipelineType` from
updateActiveTexturesForCacheMiss().
Removed unused argument `context` from getReadImageView()
Rename getBufferViewAndRecordUse() to getBufferView() since there is no
"record use" happening.
Moved UpdateFullActiveTexturesDescriptorSet() function from
vk_cache_utils.cpp to ProgramExecutableVk.cpp anonymous name space,
since it is only used in this file.
Bug: angleproject:372268711
Change-Id: Ib7240c1063f727fb52588234e79fba349f9aff9e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5977481
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
79b6c7ab
|
2023-10-09T13:29:07
|
|
CL/Vulkan: Add fillWithPattern interface
In CL, the buffer can be requested to filled with a pattern. Adding a
pattern fill helper routine that fills up the buffer from CPU side.
Bug: angleproject:42267074
Change-Id: I144e9b7c6f4d1263f21cabc2491c46e8951e604f
Signed-off-by: Gowtham Tammana <g.tammana@samsung.com>
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916157
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
1a3fadbf
|
2024-11-01T13:19:43
|
|
Vulkan: Enable imagelessFB for recent QualComm drivers
Qualcomm recent drivers has the fix for imageless framebuffer bug.
Re-enable supportsImagelessFramebuffer for drivers 512.802.0 or newer.
Bug: b/369693310
Change-Id: I33a69b8abfefed572880636ff7af2c788cee5688
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5984959
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
c0a28403
|
2024-05-06T12:42:28
|
|
CL/Vulkan: Enable clEnqueueNDRangeKernel for Images and Samplers
* Performs clspv reflection for ArgumentSampler, ArgumentStorageImage,
and ArgumentSampledImage
* Creates descriptor sets for performing enqueue
Tests-Passing: OCLCTS.test_basic readimage, readimage_fp32,
readimage_int16, writeimage, writeimage_fp32, writeimage_int16,
mri_one, mri_multiple, imagenpot
Bug: angleproject:42266936
Change-Id: I2b6c631e76556870c4342d2046c267ff5cf5105d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5955597
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|