|
317f81db
|
2025-05-01T14:17:47
|
|
Fix EGL_RENDER_BUFFER query if EGL_SINGLE_BUFFER unsupported
eglCreateWindowSurface() can have the EGL attribute EGL_RENDER_BUFFER
specified:
EGL_RENDER_BUFFER specifies which buffer should be used by default for
client API rendering to the window, as described in section 2.2.2. If
its value is EGL_SINGLE_BUFFER, then client APIs should render
directly into the visible window. If its value is EGL_BACK_BUFFER,
then all client APIs should render into the back buffer. The default
value of EGL_RENDER_BUFFER is EGL_BACK_BUFFER.
Client APIs may not be able to respect the requested rendering buffer.
To determine the actual buffer that a context will render to by
default, call eglQueryContext with attribute EGL_RENDER_BUFFER (see
section 3.7.4).
To support EGL_SINGLE_BUFFER, Vulkan surfaces must support the
VkPresentModeKHR value VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR:
VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR specifies that the
presentation engine and application have concurrent access to a single
image, which is referred to as a shared presentable image. The
presentation engine is only required to update the current image after
a new presentation request is received. Therefore the application must
make a presentation request whenever an update is required. However,
the presentation engine may update the current image at any point,
meaning this mode may result in visible tearing.
However, this is only available on Vulkan devices that support the
extension VK_KHR_shared_presentable_image.
Add checking in Surface::initialize() to update Surface::mRenderBuffer
to EGL_BACK_BUFFER if the backend implementation does not support
EGL_SINGLE_BUFFER. This includes adding supportsSingleRenderBuffer() to
query the backend if it supports single render buffer mode, which
defaults to False. The Vulkan backend overrides this and the result is
based on support for VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR.
Bug: b/412446258
Test: EGLLockSurface3Test.WindowMsaaSurfaceReadTest/ES2_Vulkan_NoFixture
Test: EGLSingleBufferTest.VerifyMutableRenderBufferKHR/*
Change-Id: I4e6d56f01a895a5bd887580e6ffa34d574c87fad
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6506764
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
8ea69d84
|
2025-05-07T12:26:48
|
|
metal: Synchronize imported IOSurfaces with command buffer
We want to skip the various Metal waitUntilScheduled calls in Chromium
on single GPU systems and use only shared events for synchronization.
However, this doesn't work correctly today because ANGLE can do CPU
readbacks from the IOSurface without synchronizing with the command
buffer which contains the shared event wait. This is because ANGLE
doesn't know about the dependency between the IOSurface texture and the
shared event wait in the command buffer.
This CL makes BindTexImage mark the IOSurface texture as used so that we
wait for command buffer execution if we do a CPU readback. It reuses the
setWriteDependency mechanism on mtl::CommandBuffer.
Bug: chromium:40273077
Change-Id: I5d480f2c28abbd6d36cf1e1045461c84b3e4a1f0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6514098
Reviewed-by: Quyen Le <lehoangquyen@chromium.org>
Auto-Submit: Sunny Sachanandani <sunnyps@chromium.org>
Commit-Queue: Sunny Sachanandani <sunnyps@chromium.org>
|
|
5c441a53
|
2025-05-06T13:00:32
|
|
Vulkan: Prefer MSRTSS for QCOM devices
The feature flag `preferMSRTSSFlagByDefault` was originally added
to avoid allocating extra memory if the images are created with the
MSRTSS flag by default. If it is disabled, the image will be recreated
with the said flag only if it bound to an MSRTT framebuffer.
* preferMSRTSSFlagByDefault is now enabled for QCOM driver versions
beyond 0777.0.
Bug: b/329911999
Change-Id: Iea72f864eac5ecfa97b5c99de5bd66ef09c54c0e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6516037
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
fcfc9760
|
2025-05-06T11:26:40
|
|
Reformat VVL error message
The test
VulkanPerformanceCounterTest_ES31.TextureSampleByDrawDispatchDraw
no longer runs into the VVL error it used to have. Remove the VVL error
from the skipped VVL error list.
Bug: angleproject:42265504
Change-Id: I8eff929524b3e1bd015d96db2cc45b2c8f331170
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6514411
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
7447e8ac
|
2025-05-06T10:33:47
|
|
Vulkan: Driver workarounds on Qualcomm
Dynamic rendering is disabled on 512.800 due to crashes on some devices.
Imageless framebuffers are disabled on 512.805, suspecting cause of
crash on some other devices.
Bug: chromium:415738891
Bug: chromium:415968761
Change-Id: I71f533c7954b628ce897ed1dac478aed119658e4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6512663
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
c6e0448b
|
2025-05-05T10:49:32
|
|
Reformat VVL error message
The SYNC-HAZARD-WRITE-AFTER-READ VVL error is no longer observed
on TraceTest.special_forces_group_2, removed the error message from
skipped VVL error list.
The TraceTest.special_forces_group_2 now runs into a different
SYNC-HAZARD-READ-AFTER-WRITE VVL error, on Linux AMD GPU. An existing
entry in the skipped VVL error list already covers this error message.
Reformat that entry by adding the extraProperties, and changing the
messageContents1/messageContents2 fields to nullptr for ease of clean
up later.
Bug: angleproject:42264123
Bug: angleproject:397775556
Change-Id: I1681cd7f76dd2090e78584b08c25224d5b05d963
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6514289
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
2ca90dab
|
2025-05-02T22:38:38
|
|
Vulkan: Don't calculate vertex input state when dynamic
When vertex input state is dynamic,
VkGraphicsPipelineCreateInfo::pVertexInputeState can be nullptr. This
change makes sure time is not wasted calculating this state at pipeline
creation time.
The change also ensures drivers don't rely on info provided at compile
time by mistake.
Bug: angleproject:42265637
Change-Id: I54da8be7769f0dd0767df6d7774baa956475bf8d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6510082
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
c60d98ce
|
2025-05-03T01:06:02
|
|
WGPU: Ship driver uniforms in the bind groups to the shader
This writes driver uniforms to a WGPU buffer and ships that
buffer to the shader. Right now this creates a new buffer every time
a driver uniform changes.
Bug: angleproject:389145696
Change-Id: Icfbce4d995ef593e703a597bb96e72173ec29cda
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6477136
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
ce795fa8
|
2025-04-28T15:31:25
|
|
Reformat VVL error message
Set messageContents1 and messageContents2 fields to nullptr,
for ease of clean-up in follow-up changes.
Make the extra properties fields more specific.
Bug: angleproject:42265363
Bug: angleproject:415382790
Bug: angleproject:415383266
Change-Id: I032bc82c6aeb16281c868778db827318fa833005
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6496650
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
18ec8824
|
2025-05-02T12:42:26
|
|
Vulkan: Exclude RADV from global cache preference
* Added exception for AMD/RADV machines from the following flag:
preferGlobalPipelineCache
* (Due to no information regarding the effect of this flag on
those platforms)
Bug: b/411442610
Change-Id: Ifd9e2fe02e488d51cbb9e070106e86ac21e8533d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6509821
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
16e0dfd9
|
2025-03-20T10:59:26
|
|
Vulkan: Add feature flag to recycle VkEvent
This CL adds a feature flag to enable/disable the VkEvent recycling.
Given ARM prefers taking CPU overhead of creating and destroying VkEvent
when last reference count to VkEvent goes away instead of the extra GPU
overhead comes with vkCmdResetEvents, VkEvent recycling is disabled on
ARM.
Bug: angleproject:409441956
Change-Id: I288be6f7cfcbc4dd9c4701d20fba44349f25befc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6376784
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f6e1d4d7
|
2025-05-02T12:02:09
|
|
Fix include header case mismatches
This CL fixes the include header names to be aligned with the actual
file names. It's problematic for cross compile on Linux, where file
system is case sensitive.
Context:
Goma/Reclient's deps scanner was able to handle those case mismatches.
But, Siso's builtin remote execution doesn't resolve them automatically.
Bug: b/401959048
Change-Id: I98282899e31ea801058f82d4cad770413634f4f3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6508684
Reviewed-by: Charlie Lao <cclao@google.com>
Auto-Submit: Junji Watanabe <jwata@google.com>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
a3b20796
|
2025-04-25T13:12:08
|
|
Vulkan: Add flag to prefer renderer pipeline cache
* Added the following feature: preferGlobalPipelineCache
* The renderer's pipeline cache will be used to create pipelines,
including for warm-up.
* mPipelineCache in the program is not saved when this flag is
enabled.
* Currently enabled for NVIDIA and AMD.
* Impact on captured trace (w/ compiling inactive shaders)
* Decrease in peak system memory usage on Windows/NVIDIA:
* ~7600 MB -> ~3900 MB
* Decrease in peak RES memory usage on Linux/NVIDIA:
* ~7100 MB -> ~3600 MB
Bug: b/411442610
Change-Id: I04929569f0f8d59a77c52505072faa0244ef1393
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6495155
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
c52183bd
|
2025-04-11T11:17:10
|
|
Reset sample coverage after fbo change on Adreno
Adreno drivers cache some internal value based number of samples in
currently bound FBO and glSampleCoverage value, but doesn't update it on
FBO change.
So if we set sample coverage to 1 when FBO with 1 samples bound and then
switch to FBO with 4 samples it behaves like coverage is 0.25 instead of
1.
To avoid this, reset sample coverage after each FBO change.
Bug: chromium:408364831
Change-Id: I7d5e36926e8568f4c652049b43ecdbe382ddc293
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6447878
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Vasiliy Telezhnikov <vasilyt@chromium.org>
|
|
9bcfb38f
|
2025-04-30T23:12:19
|
|
Vulkan: Disable MSRTSS on buggy qualcomm drivers
Bug: chromium:413427770
Change-Id: I62499c3aa04f3786a0deb6afcaafb7976f2a6446
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6501621
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
|
|
4b69ba93
|
2025-04-28T16:45:56
|
|
WGPU: upload texture bind groups and configured samplers
GLSL samplers are split into separate sampler/texture variables
in WGSL. Before this CL, the WGSL translator generated shaders
that look like:
@group(1) @binding(@@@@@@) var ANGLE_sampler_samp2D :
sampler;
@group(1) @binding(@@@@@@) var ANGLE_texture_samp2D :
texture_2d<f32>;
@group(1) @binding(@@@@@@) var ANGLE_sampler_sampCube :
sampler;
@group(1) @binding(@@@@@@) var ANGLE_texture_sampCube :
texture_cube<f32>;
This CL replaces those with actual binding numbers
@group(1) @binding(0) var ANGLE_sampler_samp2D :
sampler;
@group(1) @binding(1) var ANGLE_texture_samp2D :
texture_2d<f32>;
...
Such that @binding(n*2) is the WGSL sampler variable corresponding
to the n-th GLSL sampler and @binding(n*2+1) is the WGSL texture
variable corresponding to the n-th GLSL sampler.
This CL then generates binding group layouts matching the above,
and uploads textures and configured samplers in bind groups.
This makes some of the deqp_gles2 tests 2d texture tests pass,
though some fail because they need a flipped y coordinate.
Not yet supported:
1. arrays of samplers
2. shadow samplers
3. cube textures
Bug: angleproject:389145696
Change-Id: I2ab18ae5ebb4d1289101266bd9451576aa04ce2a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6382272
Reviewed-by: Liza Burakova <liza@chromium.org>
Auto-Submit: Matthew Denton <mpdenton@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c884460a
|
2025-04-24T16:43:04
|
|
Vulkan: Fix deferred clears vs noop multidraw
Bug: chromium:407828338
Change-Id: I5da22aeb72605bb7943fa5ae079ae297d00888f7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6488794
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
e5680ba6
|
2025-04-14T17:43:07
|
|
Fix mInFlightCommands.empty() assert in CommandQueue destroy
When initialize a higher priority shared Context, ANGLE internal call
updateContextsPriority to submit previously flushed commands. This
submission is not tracked by any Context. Add
Renderer::mSubmittedResourceUse to record submitted queue serials not
belonging to any Context to fix the assertion.
Bug: angleproject:410996556
Change-Id: I7a91e47c0233832b8806637f295dffd1ff54f729
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6458623
Reviewed-by: Igor Nazarov <i.nazarov@samsung.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Neil Zhang <Neil.Zhang@arm.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d392eeae
|
2025-04-22T10:54:13
|
|
Vulkan: Force host-image-copy for LUMA textures on ARM
Bug: angleproject:42266771
Change-Id: I79a8fe14ba389195d5846261752be847bc13bcf4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6479371
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
cdcf6a63
|
2025-04-22T10:19:33
|
|
Add R10X6G10X6B10X6A10X6 support on angle
Bug: angleproject:409355677
Change-Id: I8115ca73a038360f673552532e9d9b87ff846867
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6438114
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
d698500d
|
2025-04-08T09:05:42
|
|
Fix an ASSERT() crash in ExternalFence SyncWaitFd().
https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetFenceFdKHR.html
If pGetFdInfo->handleType is VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
and the fence is signaled at the time vkGetFenceFdKHR is called, pFd
may return the value -1 instead of a valid file descriptor.
So when above scenario happens, ANGLE will get a -1 fd from
vkGetFenceFdKHR(), and then Angle will call SyncWaitFd() with the
invalid fd, it will cause an ASSERT() crash.
Bug:angleproject:409342980
Change-Id: I48d4d21d531e40f8ba275918454632ae14fec04b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6439303
Auto-Submit: Peng Huang <penghuang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
691140da
|
2025-04-22T21:05:44
|
|
Vulkan: Do not skip VUID-vkQueueSubmit-pSignalSemaphores-00067
... when "VK_EXT_swapchain_maintenance1" is enabled.
Original problem is a VVL bug, introduced in:
62e9314e2eb9c58af42f6f1b613d200d5362598d
layers: Track semaphore is in use by swapchain
It was later partially fixed in:
88934ae6acf0c8b8ae169df9607e779ac4a70239
layers: Fix waiting on present fence did not have effect
Bug is only fixed when using present fences (when
"VK_EXT_swapchain_maintenance1" is enabled).
Without present fences, VUID error still prints the following:
Swapchain image 0 was presented but not re-acquired, so VkSemaphore
0x41c700000041c7 may still be in use and cannot be safely reused with
image index 0.
a) Use a separate semaphore per swapchain image. Index these
semaphores using the index of the acquired image.
Since problem only happens in a shared present mode, re-acquiring the
image causing "VUID-vkAcquireNextImageKHR-surface-07783". It is also
unclear from the Vulkan spec if the image may be re-acquired in shared
present mode, but it is currently not necessary.
When not using present fences, ANGLE tracks present semaphores by
attaching submit serial to the previous present operation when same
image is presented. This guarantees to use more than one present
semaphore (in a shared present mode) and not to reuse semaphore with
signal operation pending. This is more strict synchronization than what
is suggested by the VUID error in the item (a).
However, it is debatable if this is ANGLE's or VVL error. If it is not
a VVL error, it at least should provide correct message of how to fix
the problem in case of a shared present mode. Theoretically, ANGLE may
fix this error by only using present semaphore for the initial present,
and skip it for all subsequent present operations, since image is
already shared with the presentation engine and present operation is
only used for notification purposes.
Bug: angleproject:408190758
Change-Id: Id0dc3c0efcba72e844ba6b2c241d0076f70fcd51
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6480175
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
6f9f343a
|
2025-04-16T14:45:33
|
|
Reland "Vulkan: Prune superseded updates during host-image-copy"
This is a reland of commit f8a8adf63c5834a725d1bd752acc6d63c3f45c05
Original change's description:
> Vulkan: Prune superseded updates during host-image-copy
>
> Bug: angleproject:42266771
> Change-Id: I7aa8e85720a54537389df615b575ddfa9951770d
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6462475
> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
> Reviewed-by: Cody Northrop <cnorthrop@google.com>
> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Bug: angleproject:42266771
Change-Id: I95e6f1d2421327a6394e627f03ef5b4cddf4a1e1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6480011
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3f88a505
|
2025-04-03T17:29:20
|
|
GenerateMipmap encode and decode sRGB when GL_SKIP_DECODE_EXT is set
According to the spec, if TEXTURE_SRGB_DECODE_EXT is set before
GenerateMipmap for a texture with format sRGB, mipmap generation should
skips the encode and decode steps during mipmap generation, matching the
mipmap generation for a non-sRGB texture.
Bug: angleproject:406829410
Change-Id: Icea8c27a1ab2f20e9fd6c8d79187c0c5cfe8e789
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6428506
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Tingwei Guo <tingwei.guo@arm.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: mohan maiya <m.maiya@samsung.com>
|
|
50a4ad19
|
2025-04-22T09:29:17
|
|
Revert "Vulkan: Prune superseded updates during host-image-copy"
This reverts commit f8a8adf63c5834a725d1bd752acc6d63c3f45c05.
Reason for revert: Has a bug in the calculation of image layers whose
updates should be dropped.
Bug: angleproject:42266771
Original change's description:
> Vulkan: Prune superseded updates during host-image-copy
>
> Bug: angleproject:42266771
> Change-Id: I7aa8e85720a54537389df615b575ddfa9951770d
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6462475
> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
> Reviewed-by: Cody Northrop <cnorthrop@google.com>
> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Bug: angleproject:42266771
Change-Id: I2b992c8598f58c40386338ade3cf59ffdb03abd5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6480413
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
|
|
f355e2b3
|
2025-04-15T18:58:25
|
|
Vulkan: Remove preferDriverUniformOverSpecConst
This was practically true for every vendor on Android (where rotation
matters). For Qualcomm, it was also true due to a bug in version
checking and didn't seem to be causing any concerns. Where pre-rotation
is supported, it is better to enable this feature to avoid excessive
pipeline creation.
This change removes the feature and makes sure ANGLE always uses
uniforms for rotation instead of spec consts. While technically this
may have an adverse effect on platforms that never need pre-rotation,
the ability is retained for all vendors since pre-rotation is finding
its way into more platforms and would likely eventually be needed
everywhere anyway.
Bug: angleproject:42265878
Bug: angleproject:42262166
Change-Id: I4b64c04da46db08cfdd44b60789b66d93d8e8b17
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6459025
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: mohan maiya <m.maiya@samsung.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
07eeca12
|
2025-04-17T20:58:19
|
|
Metal: prevent padding in state cache's structs.
Fixed: angleproject:411845677
Change-Id: I8a9635634e66f86c132205f75825a916481f7ad0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6468239
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
f6a350de
|
2025-04-17T20:43:08
|
|
Metal: fix rasterSamplecount not used in comparing render passes.
RenderPassDesc's rasterSamplecount was not used to comparing two
render passes' descriptors.
Note: no reported bug found related to this missing comparison yet.
This bug most likely affects render passes without any attachment
(PLS?). Because if the 2 render passes have the same attachments, their
rasterSamplecount values must also be equal.
There was also a missing rasterSamplecount comparison in
RenderPipelineOutputDesc::operator==. However, this function is not
used. When comparing two render pipelines,
RenderPipelineDesc::operator== is used instead, which is currently
implemented using memcmp. So removing the former to avoid confusions.
Bug: angleproject:411845677
Change-Id: Ic9b1867226561d096c1fb8ca2194b657d29daa18
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6468238
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
|
|
f8a8adf6
|
2025-04-16T14:45:33
|
|
Vulkan: Prune superseded updates during host-image-copy
Bug: angleproject:42266771
Change-Id: I7aa8e85720a54537389df615b575ddfa9951770d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6462475
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
a9f2f87f
|
2025-04-15T13:46:34
|
|
Vulkan: Update version macros
* Updated the deprecated version macros
* VK_VERSION_MAJOR -> VK_API_VERSION_MAJOR
* VK_VERSION_MINOR -> VK_API_VERSION_MINOR
* VK_VERSION_PATCH -> VK_API_VERSION_PATCH
* VK_MAKE_VERSION -> VK_MAKE_API_VERSION
* Added a separate case for QCOM drivers in getVersionString().
* The major version is now OR-ed with 512.
* (New drivers seems to have a major version of 512, which falls
not within the major field, but the variant field, when using
the VK_API_VERSION_x macros.)
Bug: angleproject:42267006
Change-Id: Ic9b761d182ff49c3ede43c7bd14f366f945fbf36
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6460682
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4b9525b2
|
2025-04-04T00:00:00
|
|
Remove all getClientMajorVersion helpers
Client version checks should use
proper struct compare operations.
Bug: angleproject:408843436
Change-Id: I92cd91d1e7e6daa761f79060835aa534c5671264
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6467460
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a6a7de5a
|
2025-04-16T14:28:13
|
|
Vulkan: Sync perf counters in finishImpl(...)
.. instead of finish(...) so other code paths like onDestroy(...)
have a chance to update perf counters before decoupling from the
sharegroup
Bug: angleproject:386749841
Change-Id: Ib0f847dda2274686ed9e5d3c8211ee5a364e4b65
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6463366
Commit-Queue: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
408f5853
|
2025-04-04T00:00:00
|
|
Make gl::Version data members private
* Further simplified gl::Version implementation by
making data members private and merging them.
* Used proper version struct comparisons instead
of accessing individual version components.
* Moved known version constants to Version.h
for broader availability.
* Removed no longer used helpers:
* PrivateState::getClientMinorVersion()
* State::getClientMinorVersion()
* Context::getClientMinorVersion()
Bug: angleproject:408843436
Change-Id: I3ae8f495269d649253fa2381ecbfc018a184fa20
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6460787
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
b64d380e
|
2025-04-15T00:54:22
|
|
Vulkan: Ghost texture's image backing if overwritten
If the texture's image is in use by the GPU but is overwritten
completely, this change releases the old image and creates a fresh one.
If the texture was used in a render pass, this avoids breaking the
render pass. Otherwise, it allows the new image to be initialized with
VK_EXT_host_image_copy functionality. In the very least, an unnecessary
barrier is avoided.
As a targeted optimization, this functionality is limited to non-array
2D color textures which are known to benefit from this ghosting in
applications. Other texture types can be easily added, but need lots of
tests to be added.
Bug: angleproject:42265356
Change-Id: I18a7587599e36f9f70109264ddc1003b24b8b2df
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6456345
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
0ed51ec7
|
2025-04-10T22:41:22
|
|
Vulkan: Disable color attachment usage for LUMA formats
Bug: angleproject:42265356
Change-Id: If97fd59e85febfdf345a36097901a2015aa4183b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6447236
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
49d0a332
|
2025-04-08T16:07:17
|
|
Vulkan: Remove ring buffer allocators
* Removed the ring buffer allocator functionality from ANGLE:
angle::RingBufferAllocator
* Also removed the related common files.
* (Pool allocators will be used at all times.)
* Removed the placeholder functions from the pool allocator.
* Removed the following BUILD flag:
angle_enable_vulkan_shared_ring_buffer_cmd_alloc
* Removed redundant line from ContextVk.
Bug: b/410036490
Change-Id: I368fb93a66ddfd192018b09f65004a32339abd5a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6442640
Reviewed-by: Igor Nazarov <i.nazarov@samsung.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
33e035f9
|
2025-04-04T00:00:00
|
|
Enforce correct usage of gl::Version
In preparation for the implementation update,
ensured that gl::Version struct is always
initialized with 8-bit values.
Bug: angleproject:408843436
Change-Id: Idcc925b49cadc7fdc4f05ff2acaed8020e72a32e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6458758
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4be3143c
|
2025-04-10T15:18:52
|
|
Vulkan: Vertex attribute hole crash workaround
When the start vertex index of glDrawArrays is not 0, this hole
case will crash again.
* Added a condition to bypass the attribute update if the
attribute pointer is null.
* Added a glDrawArrays(GL_TRIANGLES, 3, 3) in unit test
VertexAttribPointerCopyBufferFromInvalidAddress
Bug: angleproject:359729255
Change-Id: I1d7f50dc56080ef0b4e48c4c3c983189a26171c1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6445172
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Auto-Submit: Mavis Deng <mavis.deng@arm.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
ac8607a9
|
2025-03-27T16:46:21
|
|
Vulkan: Disable graphics pipeline on ARM due to performance loss
ARM is investigating on Graphics Pipeline Library(GPL) on contents
whose performance loss is unacceptable. Therefore, it's recommended
to disable GPL until the problematic area gets fixed and the final
performance data is acceptable.
Bug: angleproject:404581992
Change-Id: I2bcb5f8bca3d64be0e947d7262a615ef867532ef
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6400174
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
a3f2545f
|
2025-04-11T14:03:08
|
|
Tests that exercise overwriting textures while in use
The first three tests are credit Cheryl Wei <@arm.com>, adopted from
https://chromium-review.googlesource.com/c/angle/angle/+/3366193
The change also exposed the fact that the force_fallback_format with
ASTC leads to assertion failure if ASTC emulation is not built. This
change adjusts the format table to fix that as well.
Bug: angleproject:42265356
Change-Id: Ib68355f317472d8cc3f035b492b273ac452a8217
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6447202
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
d32c6c03
|
2025-04-11T15:12:24
|
|
Vulkan: Treat present SURFACE_LOST_KHR as OUT_OF_DATE
... when in shared present mode.
Handle `VK_ERROR_SURFACE_LOST_KHR` the same way as
`VK_ERROR_OUT_OF_DATE_KHR`, because on some platforms (observed on
Android) swapchain recreate still succeeds making this error behave the
same as OUT_OF_DATE. In case of a real surface lost, following
swapchain recreate will also fail, effectively deferring the failure.
This will avoid generating swap buffers failure unnecessarily, which may
cause abortion of the application.
Bug: angleproject:409809766
Change-Id: Ie8abd6b10f160254c94abc0f799195d7414681e3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6450580
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
|
|
5dd05578
|
2025-04-14T07:34:57
|
|
Revert "GL: Allow untranslated shaders to pass through on GLES"
This reverts commit 4e77552b86a89b449ada6d6c18f84285f5812b1d.
Reason for revert: breaks ChromeOS and fuzzers
Bug: angleproject:398857482
Original change's description:
> GL: Allow untranslated shaders to pass through on GLES
>
> Add an EGL extension EGL_ANGLE_create_context_passthrough_shaders which
> uses the NULL translator and passes the original shader to the driver.
> The parser is still used for shader reflection.
>
> Bug: angleproject:398857482
> Change-Id: I7c5fcc318c7e11931f78c08dcbf4764bf77d397d
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6297527
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Bug: angleproject:398857482, angleproject:410423936
Bug: chromium:410114655, chromium:410100607, chromium:410121218
Bug: chromium:410052365, chromium:410290507, chromium:410178288
No-Presubmit: true
Change-Id: I45b01960637a1cda05d21a7df6d07465f6a8f5e9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6448984
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
4e77552b
|
2025-02-24T18:04:32
|
|
GL: Allow untranslated shaders to pass through on GLES
Add an EGL extension EGL_ANGLE_create_context_passthrough_shaders which
uses the NULL translator and passes the original shader to the driver.
The parser is still used for shader reflection.
Bug: angleproject:398857482
Change-Id: I7c5fcc318c7e11931f78c08dcbf4764bf77d397d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6297527
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
78048112
|
2025-01-15T15:13:14
|
|
Fix IndexRange::vertexIndexCount calculation
Use only one loop.
Avoid redundant primitive restart index parameter.
Avoid calling GetPrimitiveRestartIndexFromType() because the algorithm
relies on the value being numeric_limits<T>::max().
Fixes a bug where primitive restart case would process the value
after first primitive restart twice, once in both for loops. This would
result in incorrect vertexIndexCount.
Fix by removing IndexRange::vertexIndexCount, and instead using
IndexRange::mCount == 0 to signify empty range.
Bug: angleproject:401284933
Change-Id: Ifaeb9949f2e852fb7c5ef80bc47f72bfabba21a6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6333541
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
1c0bcb06
|
2025-04-08T18:42:43
|
|
Reformat VVL error
angleproject:42265363:
dead_by_daylight hits the VVL error covered by another
entry in the skip list. Move the dead_by_daylight comment
above the other entry.
angleproject:42265427:
VVL error added to the skip list in this bug still
occurs on blade_and_soul_revolution and FramebufferFetch*
tests. Change the VVL error message to use the new formats:
remove the messageContents1 and messageContents2, and add more
extraProperties.
Bug: angleproject:42265363
Bug: angleproject:42265427
Change-Id: Ie913a7345b9f16580507894edd4a2befa29e9418
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6442305
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
3dcf109d
|
2025-04-10T17:19:09
|
|
WebGPU: Refactor syncClientArrays.
This change adds a few helper methods for syncClientArrays
to improve readability
Bug: angleproject:401499251
Change-Id: Ida427f80e07f469b83ff12850169b2110e65743c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6441946
Reviewed-by: Matthew Denton <mpdenton@chromium.org>
Commit-Queue: Liza Burakova <liza@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
595d79e4
|
2025-04-04T00:00:00
|
|
Do not expose GL_ARB_sync
That extension does not exist in OpenGL ES.
Fixed: angleproject:409717088
Change-Id: I82234f0051c2c646ef15c22e1a0da1704ef3a35b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6448233
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
ce394c49
|
2025-04-10T10:33:57
|
|
Vulkan: Fix undefined behavior accessing empty vertex buffer
This fixes undefined behavior detected by VVL:
[ SYNC-HAZARD-READ-AFTER-WRITE ] vkCmdDraw():
READ_AFTER_WRITE hazard detected. vkCmdDraw reads vertex
VkBuffer 0xe000000000e, which was previously written by
vkCmdBeginRenderingKHR.
No sufficient synchronization is present to ensure that a read
(VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT) at
VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT
does not conflict with a prior write
(VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT) at
VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT.
This is regression from the old CL:
https://crrev.com/c/angle/angle/+/3297026
Vulkan: Don't attempt to convert vertices in empty buffers
Above change made `if (bufferVk->getSize() == 0)` branch a dead code.
In the current code this branch is `if (numVertices == 0)` and is no
longer a dead code. It sets zero stride to prevent reading beyond the
empty buffer (which is only 16 bytes).
This fix also sets `mCurrentArrayBufferStrides[attribIndex]` to zero
when it is not a streaming attribute (in case of zero sized buffer).
Bug: chromium:1271671
Change-Id: I3460201ae7366b8de1089efef6fbefe359d28460
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6440439
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f4ff9241
|
2025-04-08T14:37:08
|
|
WGPU: add utils for converting between GLSL and WGSL types
...specifically those related to textures and samplers.
Bug: angleproject:389145696
Change-Id: If3bec56b70c04443928ef0d4e1e1a40b5c578cc0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6441818
Reviewed-by: Liza Burakova <liza@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
|
|
02ae054c
|
2025-04-07T13:48:29
|
|
Translator: Fix init of inactive output variables
Bug: chromium:398401939
Change-Id: I0df494b945b8d0e805a62cf7645d06bf233f36ca
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6438495
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
a6f44806
|
2025-04-01T17:30:53
|
|
Wrong condition to call copyBufferDataToImage
In function copyBufferDataToImage, it call vulkan vkCopyBufferToImage
directly. To call copyBufferDataToImage directly, it needs that there's
no overlap when copy.
If mImage is not valid, it will assert in mImage->getActualFormatID().
Need to check its validation at beginning.
Bug: angleproject:406566447
Change-Id: I875c2a97bec52251b9c5b3d196466e8bf5ce662d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6400313
Auto-Submit: Jiaqi Li <Jiaqi.Li@arm.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
a0a5c565
|
2025-04-07T15:05:11
|
|
Vulkan: Add assert to check only clear is staged on swapchain image
The swap after clear optimizations on swapchain image multisampled
image
https://chromium-review.googlesource.com/c/angle/angle/+/6072416
works with the assumption that the only staged updates on swapchain
multisampled image is clear. This change adds an assert to validate
the assumption holds true before applying the optimization.
If the assert is ever triggered, we will know the assumption is
violated, and we need to look into how to tweak the optimization or
add other optimizations to solve the violated case.
Bug: angleproject:382006939
Change-Id: I7ce23dd7767b7730f1fa3ec89cb6616689339602
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6437217
Reviewed-by: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
d27a1fd0
|
2025-04-03T19:59:20
|
|
Compiler: Allow denorm float values in the lexer
This adds an option to preserve denorm values in the lexer,
skipping the explicit zero conversions for below range floats.
There are applications in the wild that expect to be able to
use denorm float values. They are typically immediately converted
to integer values, not used in floating point operations.
The option is only enabled for Vulkan backends.
Test: FloatLexTest, DenormFloatsToIntValues, app traces
Bug: b/406827038
Change-Id: Iab5a1a69a540b78ccbce8ea90b532d2d4976e29e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6432237
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
0e28c030
|
2025-04-02T17:26:28
|
|
ScalarizeVecAndMatConstructorArgs on WGSL shaders.
WGSL does not support mixing types in the constructors of vectors and
matrices. Use the ScalarizeVecAndMatConstructorArgs traverser to
scalarize these constructors and update it to cast to the destination
type if the inputs are not in that type already.
Bug: angleproject:395659799
Change-Id: I4c270f2b18e79393e3c187916f33ad719bc88a63
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6427067
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
f798b0d2
|
2025-04-04T08:17:57
|
|
Vulkan: Remove enablePreRotateSurfaces feature
Removed to simplify the code and to avoid the problem for which
`presentSubOptimalReturnedOnTransformChange` feature was added.
Platforms without the per-rotation support always have
`VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR` as the `currentTransform`, so
the code will perform the same as when the feature was disabled.
Add `warmUpPreRotatePipelineVariations` to explicitly control
per-rotation pipeline warm up.
Bug: angleproject:42262166
Change-Id: I44f6c221c11105f01f62f62622987b1955bc58aa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6433586
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
|
|
b77f8af7
|
2025-04-02T19:01:48
|
|
Vulkan: Ignore SUBOPTIMAL on Android without pre-rotate
Android returns `VK_SUBOPTIMAL_KHR` when window orientation changes,
while ignores size changes. When "enablePreRotateSurfaces" is disabled,
each present will return `VK_SUBOPTIMAL_KHR` if `currentTransform` is
not `VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR`, causing swapchain recreate
on each swap. This behavior makes disabling "enablePreRotateSurfaces" on
Android worse than suboptimal.
New "presentSubOptimalReturnedOnTransformChange" feature is currently
enabled only on Android for the reason described above. It may be
enabled for other platforms in the future if required.
Change also improves error handling, by moving `deferAcquireNextImage()`
call right after the `queuePresent()`, before any other call that may
fail. This will avoid repeated present of the same image if something
fails after successful `queuePresent()` call.
The `checkForOutOfDateSwapchain()` and `computePresentOutOfDate()` was
combined into a single method to improve error handling and to simplify
the code.
Bug: angleproject:397848903
Bug: angleproject:42266082
Bug: angleproject:42262166
Change-Id: I7ba2389ad2ddafc0c77c3068cd85ac9b9251ccdd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6424753
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
127aec7e
|
2025-04-03T13:54:17
|
|
Vulkan: Remove VVL error skips that have been fixed
Test:
--gtest_filter='MemoryBarrierBufferTest.TransformFeedbackBitWriteThenCapture*'
Bug: angleproject:42266506
Change-Id: I0261a26157f6e44d25e6631faec96a55e470ea66
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6431825
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
b8151923
|
2025-04-03T11:34:18
|
|
Vulkan: Remove VVL error skips that have been fixed
Test:
--gtest_filter='MemoryBarrierBufferTest.TransformFeedbackBitWriteThenCapture*'
Bug: angleproject:42266506
Change-Id: I314ee10d9ee67f5871312d730f35c2232a9372b7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6430466
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
92cb669b
|
2025-04-03T15:26:42
|
|
Manual roll vulkan-deps from 12ef946decd5 to 48f50085fcda (21 revisions)
Suppress VUID-vkQueueSubmit-pSignalSemaphores-00067 due to
https://github.com/KhronosGroup/Vulkan-ValidationLayers/pull/9840
Manual roll requested by ynovikov@google.com
https://chromium.googlesource.com/vulkan-deps.git/+log/12ef946decd5..48f50085fcda
Also rolling transitive DEPS:
https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang/+log/e57f993cff981c8c3ffd38967e030f04d13781a9..c3d39de93955f884e443c39e9ffecf86e4aac883
https://chromium.googlesource.com/external/github.com/LunarG/VulkanTools/+log/27e60d9cd9d68cfcb6ca597956a4e57ac330413b..9e702e25aa472c8528b49c874a3c03d514df1ede
https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers/+log/8c88e0c4c94a21de825efccba5f99a862b049825..8e82b7cfeca98baae9a01a53511483da7194f854
https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools/+log/056e3ed2c7ca7b30aa803685f806de7a2402aa85..4bd1536ed79003a5194a4bd8c9aa2fa17a84c15b
https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/73d7d74bc979c8a16c823c4eae4ee881153e000a..b2fee806c378105400a1ed4bc4b63ee3c08ddc4e
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,romanl@google.com,ynovikov@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: angleproject:408190758
Change-Id: I835d826a71590c788c29cecd7958951e5b648df8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6430461
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
4d478713
|
2025-04-03T08:10:40
|
|
Revert "Metal: Make StateCache descriptors hash consistent"
This reverts commit 4334125be506e0c2c5dde4cfc29b31a7ff2bdec6.
Reason for revert: Pipeline creation failures.
Bug: chromium:407310859
Original change's description:
> Metal: Make StateCache descriptors hash consistent
>
> Various descriptors would compare equality and do hashing based on the
> underlying storage. The storage contains alignment padding and
> bitfields. The contents of these are not defined, even when the
> constructors tried to memset and memcpy.
>
> The various hash and compare functions also seemed to be missing some
> elements, like rasterSampleCount.
>
> Missing == on fields and hashing unused memory may lead to inconsistency
> where a==b is true but hash(a) != hash(b).
>
> Fix by:
> Remove the memset/memcpy and write out the operator== and
> hash() consistently.
>
> Initialize the members to their default values.
>
> Use uint32_t : 1 instead of bool if the struct tries to optimize for
> size, since mixing types stops the packing.
>
> Use uint32_t to get the alignment to uint32_t, which is mostly what
> is expected.
>
> Use uint32 someVar : N where N is payload bits + padding bits for
> the last member. This way the assignment clears the padding bits.
> The goal os to get the operator== to compare the padding bits, which
> lets the compiler elide the memberwise compares and use word-wise
> compares where it makes sense.
>
> This is an attempt to fix rare crashes related to map inserts
> and lookups. std::unordered_map will crash if operator== is not
> consistent with hash.
>
> Bug: angleproject:403372465
> Change-Id: I0a3a2ff327ac9f65e7d41bc9585cda54ce93ab86
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6355828
> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Bug: angleproject:403372465
Change-Id: Id111c0728b603776fd8085fd395819bb5aa14722
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6428466
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Reviewed-by: Quyen Le <lehoangquyen@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
a7e8c957
|
2025-04-01T17:08:01
|
|
Split SetUniform into inline and noinline path
Makes a single smaller function for the common cases, and setting
uniforms with a stride or boolean conversion is extracted
to separate function calls. This results in the main SetUniform
being about half in assembly size and yields a small but noticeable
performance improvement in my tests on an Android device.
Impact on the binary size is negligible.
Bug: b/383305597
Change-Id: I630ff41cfeea6ce9e24e30cdebfbb58382e67de7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6422893
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
0f9feb49
|
2025-03-15T23:51:04
|
|
Metal: Use render passes for B2T PBO copies.
This would make it possible to avoid setting ShaderWrite usage to all
textures in future.
Bug: chromium:392521084
Change-Id: I25145f3578589c71ee469df08162d3a3f17c8cbe
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6356129
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
|
|
9ee2c7e7
|
2025-04-02T16:01:45
|
|
Vulkan: Remove VVL error skips that have been fixed
Bug: angleproject:42265220
Change-Id: I828f1d96a19efd0de9220b2168cfa9c3aab80912
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6427323
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f56c8e02
|
2025-03-28T00:00:00
|
|
Fix & cleanup advanced blend equations support
* Made advanced blend equation extensions
enableable to facilitate better testing.
* Made initial BLEND_ADVANCED_COHERENT state to be
unconditionally true regardless of the extension
support. If the coherent extension is unsupported,
that state must not be observable anyway.
* Ensured that advanced blend equation functionality
is supported on unextended OpenGL ES 3.2 contexts.
* Removed redundant ES 2.0+ context version checks
because these extensions must never be enabled
on ES 1.x contexts.
* Fixed ValidateBlendBarrierKHR to set the correct
error code and properly mark invalid calls.
* Added more negative test cases and enabled
tests on OpenGL ES 3.0 contexts.
Bug: angleproject:42262258
Bug: angleproject:406922380
Change-Id: I709376ad40b09972a31a691ca3813e87dd2c8165
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6421857
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
a625043f
|
2025-04-01T16:09:14
|
|
Vulkan: Remove VVL error skips that have been fixed
Bug: angleproject:42265220
Change-Id: Ia2048817c6238031c83aaa237c6c88b0e9a9ebf9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6423550
Auto-Submit: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
23c1e11e
|
2025-04-01T11:27:02
|
|
Disable platform trace events by default, except Chromium build
Observed overhead in perf builds is too significant,
some workloads generate thousands of events per second.
There does not seem to be a simple way to get around the overhead - it
could be somewhat reduced but the event rate is just too high.
ANGLE_TRACE_EVENT*(...) etc become a no-op by default.
Can be re-enabled with angle_enable_platform_trace_events=true gn arg
Bug: angleproject:404542398
Change-Id: I8d7363ee28d22226f1860e24f2399bb4129cfb84
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6419308
Commit-Queue: Roman Lavrov <romanl@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Feels: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
bbf92d12
|
2025-03-21T12:43:14
|
|
Vulkan: Add workaround flag for extra submit fence
This change is a workaround for some devices exhibiting a
device-lost error related to the fence usage in the command
batches when working with EGL sync objects, such as a cycle
similar to below:
- <Some GL work>
- eglCreateSyncKHR()
- glFlush()
- eglDupNativeFenceFDANDROID()
- eglDestroySyncKHR()
- <More GL work>
(The exact point of error and the reason for the device-lost
remain unknown.)
This change is meant to mitigate such errors on those devices if
needed. However, for the rest, the feature will remain disabled.
* Added a new feature flag: enableExtraSubmitFence
* Modified the usage of mFence in CommandBatch
* It is also used when enableExtraSubmitFence is enabled, even if
there is an external fence.
* When there is an external fence, this object is used to create
an empty submission after the primary commands are submitted
using the external fence.
* Added the config to enable EnableExtraSubmitFence for the following
suite: EGLSyncTest
Bug: b/384477641
Change-Id: I05f8bdcc804967c4984416af802326d22afd7a46
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6378778
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
ecc378cc
|
2025-03-03T16:43:33
|
|
Reland "Dont use Subject/Observer for SwapchainImageChanged"
This is reland of the following CL
https://chromium-review.googlesource.com/c/angle/angle/+/6319893
Because we do deferred ANI (VkAcquireNextImage) call until image is
needed, we need a way to force Context to go through
FramebufferVk::syncState call (FramebufferVk::syncState calls
WindowSurfaceVk::getAttachmentRenderTarget, which end up calling ANI.
Right now we uses subject/observer mechanism, by sending
angle::SubjectMessage::SwapchainImageChanged to all observers of
WindowSurfaceVk. In this case it is egl::Surface. Then eglSurface
redirects this message to its observers, which are all gl::Framebuffer's
attachments: color, depth, stencil. Even though only color attachment
needs to be notified, but because we don't have a separate list of
observers, depth/stencil attachment also receive the notification and
they early out. Then gl::Framebuffer sets
DIRTY_BIT_COLOR_BUFFER_CONTENTS_0 dirty bit and send the
angle::SubjectMessage::DirtyBitsFlagged to Context, which dirty DrawFBO
and ReadFBO and dirty cached state. Note that this is specific for swap
image changed case, there is no surface property change (surface
property change will still trigger the subject/observer message with
SubjectMessage::SubjectChanged message, but this occurs rarely). This
gets worse for apps that uses multiple contexts, for the example
pokemon_masters_ex has three contexts, each context has its own default
frame buffer that attach to the same surface, and we never remove
non-current context from the observer list. This end up with
egl::Surface has 12 observers and for every frame, it loop over the list
of 12 observers and send message (virtual function call) to each of
them. Color attachment also ends up sending two messages to Context, one
for Read FBO and another for Draw FBO. There are total 21 virtual
function calls. Even for single context usage, you have 6 virtual
function calls, for every frame.
EGL spec says "an EGLSurface must be current on only one thread at a
time", any other context must call EGLMakeCurrent in order to use this
surface, which will add all necessary dirty bits at that time. So we
really only need to notify current context. In this CL,
SwapchainImageChanged no longer uses subject/observer mechanism, so this
message is removed.
This CL still uses subject/observer mechanism to send DirtyBitsFlagged
from Framebuffer back to context. We could call setDrawFramebufferDirty
and setReadFramebufferDirty directly, but that will require to remove
the "const" decoration out of gl::Context which generates too much code
diff, so onStateChange(angle::SubjectMessage::DirtyBitsFlagged) is still
used.
Bug: angleproject:400711938
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6319893
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Change-Id: I017b0e8934b5194a520828fa5c4af1d6e3ef9aac
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6404621
|
|
eb8deecd
|
2025-03-28T14:03:50
|
|
Remove VVL error skips that have been fixed
Bug: angleproject:42265220
Change-Id: I1588db6ec2846faf92eef9042ba483547c0f5127
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6410511
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
4334125b
|
2025-03-14T16:12:32
|
|
Metal: Make StateCache descriptors hash consistent
Various descriptors would compare equality and do hashing based on the
underlying storage. The storage contains alignment padding and
bitfields. The contents of these are not defined, even when the
constructors tried to memset and memcpy.
The various hash and compare functions also seemed to be missing some
elements, like rasterSampleCount.
Missing == on fields and hashing unused memory may lead to inconsistency
where a==b is true but hash(a) != hash(b).
Fix by:
Remove the memset/memcpy and write out the operator== and
hash() consistently.
Initialize the members to their default values.
Use uint32_t : 1 instead of bool if the struct tries to optimize for
size, since mixing types stops the packing.
Use uint32_t to get the alignment to uint32_t, which is mostly what
is expected.
Use uint32 someVar : N where N is payload bits + padding bits for
the last member. This way the assignment clears the padding bits.
The goal os to get the operator== to compare the padding bits, which
lets the compiler elide the memberwise compares and use word-wise
compares where it makes sense.
This is an attempt to fix rare crashes related to map inserts
and lookups. std::unordered_map will crash if operator== is not
consistent with hash.
Bug: angleproject:403372465
Change-Id: I0a3a2ff327ac9f65e7d41bc9585cda54ce93ab86
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6355828
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
7fb1ac40
|
2025-03-10T20:28:56
|
|
Support EGLImageTargetTexture2DOES + GenerateMipmap
According to the spec, If an application adds mipmap levels
to a texture originally created with EGLImageTargetTexture2D,
OpenGL will allocate new memory for the updated texture,
copying existing data, including from the EGLImage source.
So, relevant support is added.
Bug: angleproject:405840226
Change-Id: I4495df2d8ee1e18b4482808a290dcd861ef85b77
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6335305
Auto-Submit: Robic Sun <Robic.Sun@arm.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
8cf89716
|
2025-03-14T20:17:07
|
|
Vulkan: Remove perFrameWindowSizeQuery feature
Feature was enabled for all platforms in order for surface to be resized
before acquire next image (not only after swap). Remove it, as if it's
always enabled to simplify the code.
Bug: angleproject:397848903
Bug: angleproject:42262287
Bug: angleproject:42262286
Bug: angleproject:40096601
Change-Id: I768772e30f5f38f68992e5b82c84430732aa77d9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6354166
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
e4bfa483
|
2025-03-27T10:54:19
|
|
Remove VVL error skips that have been fixed
Bug: angleproject:42265220
Change-Id: I9d6cb7ee4ace27cad5ef3db84d83ded6ca9095f8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6404613
Auto-Submit: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
081934f6
|
2025-03-12T15:22:31
|
|
Vulkan: Add avoidInvisibleWindowSwapchainRecreate feature
There is a bug on some NVIDIA drivers on Linux X11 when
`vkAcquireNextImageKHR()` constantly returns `VK_ERROR_OUT_OF_DATE_KHR`
if recreate the swapchain while window is not visible.
If not recreate the swapchain after window resize - nothing happens,
acquire and present works without errors. But if recreate the swpahchain
to the `VkSurfaceCapabilitiesKHR::currentExtent` the next
`vkAcquireNextImageKHR()` will return `VK_ERROR_OUT_OF_DATE_KHR`. ANGLE
will retry to recreate the swapchain one more time and fail the call.
Enabling the "avoidInvisibleWindowSwapchainRecreate" feature will avoid
swapchain recreation when window size changes while it is not visible.
Test: angle_end2end_tests --gtest_filter=EGLSurfaceTest.ResizeInvisibleWindow/*
Bug: angleproject:397848903
Bug: angleproject:42264022
Bug: angleproject:42263074
Change-Id: I48588bf467d15c0e84b923092e06a42c22084dcc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6348739
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
|
|
caf14998
|
2025-02-25T17:28:05
|
|
Vulkan: Fix window surface resize and size query
Added `mSizeState` enum member. When it is not `Resolved`, surface size
is not yet resolved and may change any time in response to native window
resize. Otherwise, surface size is resolved and will not change until
next swap.
Updated `getUserWidth()`/`getUserHeight()` methods. They return
current window size when surface size is not resolved, or current
surface size, otherwise. Window size is queried either by
`getCurrentWindowSize()`, when surface is sized by swapchain, or
by querying vulkan surface capabilities.
The "perFrameWindowSizeQuery" feature controls when `mSizeState` is
updated. Initially it is not resolved. Marked as not resolved in
`invalidateSwapchain()`, and in `deferAcquireNextImage()` when the
feature is enabled. It is marked as resolved after swapchain is created
when feature is disabled, or in `AcquireNextImageUnlocked()` function
after acquire next image, otherwise.
Enabled some tests that were previously failing. Replaced old resize
tests with new versions.
Test: angle_end2end_tests --gtest_filter=EGLSurfaceTest.Resize*/*
Bug: angleproject:397848903
Bug: angleproject:373659619
Bug: angleproject:153329980
Bug: angleproject:42266013
Bug: angleproject:42265843
Bug: angleproject:42265529
Bug: angleproject:42264022
Bug: angleproject:42263074
Bug: angleproject:42261800
Bug: angleproject:40096826
Change-Id: I3ad836960a68229fab6c94624022f1a0aaf2c3e5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6300645
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
e44357c6
|
2025-03-25T15:50:15
|
|
Vulkan: Do not defer ANI in shared present mode
Calling ANI in shared present mode is not necessary after the initial
acquire. Skip calling `deferAcquireNextImage()` in that mode.
For code simplicity and as a preparation for (anglebug.com/400711938),
the `invalidateSwapchain()` method is now also defers ANI and notifies
`SubjectMessage::SurfaceChanged` to the parent class. `Framebuffer`
message handling was updated to also reset color buffer dirty bit and
to notify `SubjectMessage::DirtyBitsFlagged` if needed, as in the
`SubjectMessage::SwapchainImageChanged` message case (which will be
removed in future CL). This way, single `SubjectMessage::SurfaceChanged`
message is enough to handle swapchain recreate.
The `VK_SUBOPTIMAL_KHR` is no longer treaded as OUT_OF_DATE when in
shared present mode. Added for consistency (since we are already
skipping "perFrameWindowSizeQuery" checks), to preserve content, and to
match the Android native GLES driver behavior.
Call `invalidateSwapchain()` when swapchain operations fail to avoid
repeated swapchain use and to be able to recover from the error.
The `checkForOutOfDateSwapchain()` was split into two methods:
- checkForOutOfDateSwapchain():
- Called only after present.
- Checks present out of date result and present mode compatibility.
- Invalidates the swapchain and updates the present mode if the above
checks fails.
- prepareSwapchainForAcquireNextImage():
- Calls `queryAndAdjustSurfaceCaps()` and `recreateSwapchain()`
if swapchain is invalid.
- Calls `queryAndAdjustSurfaceCaps()` and checks surface properties
when "perFrameWindowSizeQuery" is enabled. Then calls
`recreateSwapchain()` if something changed.
Other changes:
- The `prepareForAcquireNextSwapchainImage()` method was replaced with
`prepareSwapchainForAcquireNextImage()`.
- Removed `doDeferredAcquireNextImageWithUsableSwapchain()` and
`postProcessUnlockedAcquire()` methods because of redundancy.
- Move image invalidation code into `acquireNextSwapchainImage()` to
make `doDeferredAcquireNextImage()` simpler.
- Convert `resizeSwapchainImages()` into `createSwapchainImages()` for
simplicity.
Updated old and added new tests.
Test: angle_end2end_tests --gtest_filter=EGLSurfaceTest.ReadFramebufferBindingSyncState/*
Test: angle_end2end_tests --gtest_filter=EGLSingleBufferTest.OnCreateWindowSurface/*
Test: angle_end2end_tests --gtest_filter=EGLSingleBufferTest.OnSetSurfaceAttrib/*
Test: angle_end2end_tests --gtest_filter=EGLSingleBufferTest.WindowResize/*
Test: angle_end2end_tests --gtest_filter=EGLSingleBufferTest.WindowRotation/*
Bug: angleproject:400711938
Bug: angleproject:397848903
Bug: angleproject:42262606
Change-Id: I2247417aa8b7b5afc10a8420083aeb845895aec9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6387920
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
|
|
e339f91c
|
2025-03-21T10:22:59
|
|
Vulkan: Split asyncCommandBufferResetAndGarbageCleanup into two
Right now this one feature flag controls garbage clean up and command
buffer reset. If this is enabled, we are seeing command buffer reset
some times runs on small core and some times gets blocked by mutex lock
inside vulkan driver. This could take quite long while main rendering
thread is blocked by ANGLE's CommandPoolAccess lock. This CL splits this
feature flag into two separate feature flag: asyncGarbageCleanup
controls garbage clean up in the async thread or not.
asyncCommandBufferReset controls commandBuffer.reset in the async thread
or not.
This CL also disables commandBuffer.reset in async thread only on ARM
given there is no data shows other GPUs suffer form the same problem.
Bug: angleproject:378718508
Change-Id: Ice87b5b91568a0a95e0064da2b70243516ff6753
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6381893
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Roman Lavrov <romanl@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f841d12a
|
2025-03-26T14:22:16
|
|
Remove VVL error skips that have been fixed
Bug: angleproject:42265220
Change-Id: Ieb0638e3c28dd4dacaeebdcc45de381c994f4bdb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6397943
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
c2679dbc
|
2025-03-10T12:15:08
|
|
Key vertex array index range cache on restart
Key vertex array index range cache on primitive restart enablement.
Add the test to WebGLCompatibilityTest as otherwise the
VertexArray::getIndexRange() is not testable. Currently WebGL
compatibility contexts allow changing primitive restart.
Bug: angleproject:401284933
Change-Id: I48a53770d7dcb2276b89fd743f4834c53c8d8d1e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6333538
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
|
|
5024ccef
|
2025-03-25T11:37:19
|
|
WebGPU: Emulate line loops with primitive restarts
Bug: angleproject:383356846
Change-Id: Iab1d658cb3c5e32f88241f6757d1c2e5a84bf8ec
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6297524
Commit-Queue: Liza Burakova <liza@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
34db1c20
|
2025-03-20T12:56:42
|
|
Vulkan: glReadPixels should nearest sample the YUV render target
Vulkan backend uses texture except texelFetch to obtain the YUV image
value for glReadPixels. According to the chroma filter set in the image,
it may apply LINEAR sampling.
* Change this filter to NEAREST inside glReadPixels to get the correct
pixel values.
* Modify the fragment shader used in glReadPixels to make sure sampling
from the center of the pixel.
* Add a new end2end test.
Bug: angleproject:404394628
Change-Id: I0e574a464639e11671f0a09eee3e9f38b5abd919
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6366299
Auto-Submit: Aurora Zhang <Aurora.Zhang@arm.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3cfc0ce2
|
2025-03-24T07:41:33
|
|
Revert "Vulkan:Dont use Subject/Observer for SwapchainImageChanged"
This reverts commit 48103cb2f2b292cb50cc5a29546b358b2e47fd29.
Reason for revert: assert fails
https://ci.chromium.org/ui/p/angle/builders/ci/android-arm64-exp-test/7085/overview
I 22:27:33.697 77.533s _RunTestsOnDevice(17221FDF6000A4) [ RUN ] EGLAndroidAutoRefreshTest.SwapCPUThrottling/ES3_Vulkan_NoFixture
INFO:root:ERR: SurfaceVk.cpp:3165 (getCurrentFramebuffer): ! Assert failed in getCurrentFramebuffer (../../src/libANGLE/renderer/vulkan/SurfaceVk.cpp:3165): mAcquireOperation.state == ImageAcquireState::Ready
Original change's description:
> Vulkan:Dont use Subject/Observer for SwapchainImageChanged
>
> Because we do deferred ANI (VkAcquireNextImage) call until image is
> needed, we need a way to force Context to go through
> FramebufferVk::syncState call (FramebufferVk::syncState calls
> WindowSurfaceVk::getAttachmentRenderTarget, which end up calling ANI.
> Right now we uses subject/observer mechanism, by sending
> angle::SubjectMessage::SwapchainImageChanged to all observers of
> WindowSurfaceVk. In this case it is egl::Surface. Then eglSurface
> redirects this message to its observers, which are all gl::Framebuffer's
> attachments: color, depth, stencil. Even though only color attachment
> needs to be notified, but because we don't have a separate list of
> observers, depth/stencil attachment also receive the notification and
> they early out. Then gl::Framebuffer sets
> DIRTY_BIT_COLOR_BUFFER_CONTENTS_0 dirty bit and send the
> angle::SubjectMessage::DirtyBitsFlagged to Context, which dirty DrawFBO
> and ReadFBO and dirty cached state. Note that this is specific for swap
> image changed case, there is no surface property change (surface
> property change will still trigger the subject/observer message with
> SubjectMessage::SubjectChanged message, but this occurs rarely). This
> gets worse for apps that uses multiple contexts, for the example
> pokemon_masters_ex has three contexts, each context has its own default
> frame buffer that attach to the same surface, and we never remove
> non-current context from the observer list. This end up with
> egl::Surface has 12 observers and for every frame, it loop over the list
> of 12 observers and send message (virtual function call) to each of
> them. Color attachment also ends up sending two messages to Context, one
> for Read FBO and another for Draw FBO. There are total 21 virtual
> function calls. Even for single context usage, you have 6 virtual
> function calls, for every frame.
>
> EGL spec says "an EGLSurface must be current on only one thread at a
> time", any other context must call EGLMakeCurrent in order to use this
> surface, which will add all necessary dirty bits at that time. So we
> really only need to notify current context. In this CL,
> SwapchainImageChanged no longer uses subject/observer mechanism, so this
> message is removed.
>
> This CL still uses subject/observer mechanism to send DirtyBitsFlagged
> from Framebuffer back to context. We could call setDrawFramebufferDirty
> and setReadFramebufferDirty directly, but that will require to remove
> the "const" decoration out of gl::Context which generates too much code
> diff, so onStateChange(angle::SubjectMessage::DirtyBitsFlagged) is still
> used.
>
> Bug: angleproject:400711938
> Change-Id: I61354516fd0aa307714b7abd30c6b6e45ff7b496
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6319893
> Commit-Queue: Charlie Lao <cclao@google.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Bug: angleproject:400711938
Change-Id: Ib7899d1ac63a1f86af0953a1d25922578c470fc9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6387755
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
cbe26d0c
|
2025-03-04T16:56:26
|
|
Wrong texture coordinates sent to VULKAN for blit
In ANGLE's Vulkan backend, complex blit operations are implemented using
draw calls that utilize samplers and shaders, with texture coordinates
passed via push constants.
In this test case, texture coordinates are calculated based on the
effective framebuffer size, which is determined by the smallest
attachment dimensions. However, the draw call is executed on an
attachment with its original size, leading to unexpected texture
coordinates and incorrect sampling results.
Use ReadImageExtent size instead of framebuffer effective size to
calculate the sample texture coordinate.
Bug: angleproject:400584608
Change-Id: I06f0a1e48463f36aef7189f772515561d2e752d1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6321348
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Jiaqi Li <Jiaqi.Li@arm.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
1166eec4
|
2025-03-20T02:02:50
|
|
Move TRACE_EVENT inside acquireNextSwapchainImage()
The `acquireNextSwapchainImage()` is no longer called from surface
initialize, which allows to move the trance event inside the function.
Change also uses loop to handle repeated ANI retry instead of call
duplication. This is done to further reduce code duplication in the
next CL.
Additionally, fixed assert that was missed in recently merged CL:
Vulkan: Remove recreateSwapchain ContextVk dependency
https://crrev.com/c/angle/angle/+/6298733
Bug: angleproject:397848903
Bug: angleproject:42261625
Change-Id: Iae2ce35018d4fe105430271b56804af8c74152c2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6372565
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
48103cb2
|
2025-03-03T16:43:33
|
|
Vulkan:Dont use Subject/Observer for SwapchainImageChanged
Because we do deferred ANI (VkAcquireNextImage) call until image is
needed, we need a way to force Context to go through
FramebufferVk::syncState call (FramebufferVk::syncState calls
WindowSurfaceVk::getAttachmentRenderTarget, which end up calling ANI.
Right now we uses subject/observer mechanism, by sending
angle::SubjectMessage::SwapchainImageChanged to all observers of
WindowSurfaceVk. In this case it is egl::Surface. Then eglSurface
redirects this message to its observers, which are all gl::Framebuffer's
attachments: color, depth, stencil. Even though only color attachment
needs to be notified, but because we don't have a separate list of
observers, depth/stencil attachment also receive the notification and
they early out. Then gl::Framebuffer sets
DIRTY_BIT_COLOR_BUFFER_CONTENTS_0 dirty bit and send the
angle::SubjectMessage::DirtyBitsFlagged to Context, which dirty DrawFBO
and ReadFBO and dirty cached state. Note that this is specific for swap
image changed case, there is no surface property change (surface
property change will still trigger the subject/observer message with
SubjectMessage::SubjectChanged message, but this occurs rarely). This
gets worse for apps that uses multiple contexts, for the example
pokemon_masters_ex has three contexts, each context has its own default
frame buffer that attach to the same surface, and we never remove
non-current context from the observer list. This end up with
egl::Surface has 12 observers and for every frame, it loop over the list
of 12 observers and send message (virtual function call) to each of
them. Color attachment also ends up sending two messages to Context, one
for Read FBO and another for Draw FBO. There are total 21 virtual
function calls. Even for single context usage, you have 6 virtual
function calls, for every frame.
EGL spec says "an EGLSurface must be current on only one thread at a
time", any other context must call EGLMakeCurrent in order to use this
surface, which will add all necessary dirty bits at that time. So we
really only need to notify current context. In this CL,
SwapchainImageChanged no longer uses subject/observer mechanism, so this
message is removed.
This CL still uses subject/observer mechanism to send DirtyBitsFlagged
from Framebuffer back to context. We could call setDrawFramebufferDirty
and setReadFramebufferDirty directly, but that will require to remove
the "const" decoration out of gl::Context which generates too much code
diff, so onStateChange(angle::SubjectMessage::DirtyBitsFlagged) is still
used.
Bug: angleproject:400711938
Change-Id: I61354516fd0aa307714b7abd30c6b6e45ff7b496
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6319893
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
b9567391
|
2025-03-20T14:10:21
|
|
Prefer Device type requests over adapter LUID in D3D11.
When the user requests both a non-hardware device type and a specific
DXGI adapter LUID, prefer to honor the device type request.
Chrome always requests LUIDs of the first available GPU to make sure
that it prefers integrated GPUs over discreet. It only requests
non-hardware device types when software rendering is desired. This
behaviour change satisfies Chrome's intentions in both cases.
Bug: chromium:402163834
Change-Id: Idc714498260591cafc37d810c83de08a364a72f6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6377165
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
ac242c1a
|
2025-03-20T11:18:45
|
|
Vulkan: Fix the feature flag typo
Bug: b/333987915
Change-Id: Iea21592532352d95c69c0cf8dfcad96b58563ec5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6377544
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Auto-Submit: Yuxin Hu <yuxinhu@google.com>
|
|
c36d0cf0
|
2025-03-14T14:09:41
|
|
Metal: Improve ColorBlitUtils shader key hash
Did not hash transformLinearToSrgb.
Bug: angleproject:403372465
Change-Id: Ie06cf3535775f753e0468505e8b31fd513130b98
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6356891
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
|
|
6bd7a518
|
2025-03-19T13:35:48
|
|
Vulkan: Allow pipelineStatisticsQuery substitute PGO
Some devices are missing VK_EXT_primitives_generated_query
extension and primitivesGeneratedQuery (PGO) feature, which are
required for GLES3.2 extensions geometryShaderEXT and
tessellationShaderEXT. On such devices, when app requests to create
a GLES 3.2 context, the eglCreateContext call will fail due to not
able to support GLES 3.2.
We add a new feature flag
allowPipelineStaticsForPrimitivesGeneratedQuery,
and enable it on devices where we can fallback to using
pipelineStatisticsQuery (PSQ) as an approximation for
VK_EXT_primitives_generated_query, to broaden support for GLES 3.2
contexts. This is an opt-in feature for vendors that can functionally
substitute PGQ with PSQ.
Expose geometryShaderEXT and tessellationShaderEXT
extensions if allowPipelineStaticsForPrimitivesGeneratedQuery feature
is enabled.
Bug: b/333987915
Change-Id: I9f0affbc3cc383ed6c50bcfc5d4d6f7f8a708aaa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6362627
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: mohan maiya <m.maiya@samsung.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
05c491e1
|
2025-03-15T11:56:07
|
|
Vulkan: Optimize GraphicsDriverUniforms update
Unless RP is closed there is no need to dirty GraphicsDriverUniforms
when the program executable changes.
Bug: angleproject:386749841
Test: VulkanPerformanceCounterTest.NoUpdatesToGraphicsDriverUniformsOnProgramChange*
Change-Id: Id02e8a17de93e2b73103666fc6cc62ce3cdd8f43
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6358315
Commit-Queue: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
5b5a5e21
|
2025-03-17T17:59:18
|
|
Reformat VVL error message part1
Remove the string entries from skipped VVL error message.
TraceTest.manhattan_31 with SwiftShader no longer runs
into VVL error, remove the corresponding comments.
Bug: angleproject:316337308
Bug: angleproject:42265196
Change-Id: I113d2e7953b3f14ed9811df91204d046a5fe4fb4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6364335
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d668a13c
|
2025-03-14T17:18:18
|
|
Fix sync issue between XFB output and texture buffer input
For the following scenario, where the first draw writes to the
transform feedback buffer and the second draw reads from the
same buffer as a texture buffer, it is necessary to end the
render pass between the two draws and add a pipeline barrier.
// xfb write to tex_buffer
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tex_buffer);
glBeginTransformFeedback();
glDrawArrays();
glEndTransformFeedback();
// Draw with texture buffer tex_buffer
glBindBuffer(GL_TEXTURE_BUFFER_EXT, tex_buffer);
glTexBufferEXT(GL_TEXTURE_BUFFER_EXT, ..., tex_buffer);
glDraw();
Bug: angleproject:403319685
Change-Id: I9381a336ce61dea696c93158bb617a41afcfc583
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6356070
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Mavis Deng <mavis.deng@arm.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
292bb458
|
2025-03-14T12:17:49
|
|
Cut MAX_COLOR_ATTACHMENTS_WITH_ACTIVE_PIXEL_LOCAL_STORAGE_ANGLE
Since the number of real devices that support framebuffer fetch, but do
not support draw_buffers_indexed, is effectively zero,
MAX_COLOR_ATTACHMENTS_WITH_ACTIVE_PIXEL_LOCAL_STORAGE_ANGLE is an
unnecessary complication. These hypothetical devices can fall back on
shader images or just not support pixel local storage at all.
This closes the door for WEBGL_shader_pixel_local_storage to ever be
implemented on top of the ES2 extension that inspired it all,
EXT_shader_pixel_local_storage, but WebGL can just use framebuffer fetch
instead, or maybe even EXT_shader_pixel_local_storage2 some day.
This dramatically simplifies the WEBGL_shader_pixel_local_storage
extension.
Bug: angleproject:40096838
Change-Id: I9c51f2ce000620f883cb7917d4e8618c8e9ee803
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6354657
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Chris Dalton <chris@rive.app>
|
|
fca3fed3
|
2025-03-18T11:06:10
|
|
Manual roll vulkan-deps from 552ac332629b to bf9998679aee (25 revisions)
https://chromium.googlesource.com/vulkan-deps.git/+log/552ac332629b..bf9998679aee
Also rolling transitive DEPS:
https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang/+log/0051b92b6fff2fd3dbc99b7dae316fa51a7f4767..8842cf92e3de290f275c46d55cbfe42b7d0775a6
https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools/+log/9e470ef0f95d6923fa19dc5c5dc48c1442eb5a8b..ba1359d203e544bd458373ba249a47c44e97b071
https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader/+log/8491f31d36a8c642e588220b89729129721fec31..54cbefd25dbcaeb2bb03da207afce6cad7fb5dd1
https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/74a6b7dc828078cf2f1524d3947f65a29a1562e9..b2c8bd421aa5c1502fd56c3c07fb2831a8ceb882
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: angleproject:404418769
Change-Id: I359e903e2d061b7bbde6b18d234d8927d2cca56c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6368274
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Roman Lavrov <romanl@google.com>
|
|
dae3c851
|
2025-03-14T11:44:53
|
|
Vulkan: Bake non-shader state into linked pipeline
When using VK_EXT_graphics_pipeline_library, previously ANGLE would
create three pipelines libraries:
* The Shaders library was created based on the GL program's shaders + a
few static states. This typically hit the program's own pipeline's
cache that was warmed up during link.
* The VertexInput and FragmentOutput libraries were created at draw
time, which used the global pipeline cache
At draw time, immediately after creating the non-Shaders libraries, the
three libraries were linked into the final pipeline to be used by the
draw call.
This caused an inefficiency; because the non-Shaders libraries were
created independently from the Shaders library, they had to be compiled
pessimistically, for example because they could not be optimized to take
into account the precision of the fragment shader's outputs or whether
any value is const (typically alpha being set to one).
Given the creation of VertexInput and FragmentOutput libraries is
typically quite fast (the former being no-op and dynamic state anyway),
this change removes the need for creating those libraries, and directly
specifies the vertex input and fragment output state when creating the
final pipeline out of the Shaders library.
In this way, the same fragment output state can be tailored to the exact
shaders it is being used with and incur a smaller overhead. In this
change, the linked pipeline is cached in the GL program's pipeline
cache, which is never synced to the blob cache as producing it is
assumed to be fast already.
Bug: angleproject:42265839
Change-Id: I8496ea37771555522bdc9de94043a1b56fa5967e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6354205
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
f64a9547
|
2025-03-15T23:45:33
|
|
Metal: remove "Compute" from EnsureComputeShaderInitialized() name
Previously this function was named EnsureComputePipelineInitialized()
because it would create a compute pipeline. However at some point, the
pipeline's creation was moved to a pipeline cache. Thus this function
now only creates a shader function. This can be used to create both
compute & graphics shader functions so we should remove the "Compute"
part from its name.
Bug: None
Change-Id: I73d101142ec1fc72d150579bc409b1dea3196940
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6357511
Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
|
|
c935e06d
|
2025-02-24T20:13:46
|
|
Revert "Vulkan: Fix Wayland surface size queries"
This reverts commit a277f1bce563999296620c29d83c760c0fb9763d.
Reason for revert:
No longer required, because `mIsSurfaceSizedBySwapchain` is always true
on Wayland which will provide same behavior as the reverted override
methods.
It is also a preparation for the follow up change.
Bug: angleproject:397848903
Bug: angleproject:40096815
Change-Id: If83ef133b422494d73565068e06e2d6a737f6315
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6298737
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
|
|
daaae2bd
|
2025-02-24T19:36:39
|
|
Vulkan: Remove surface caps query from createSwapChain
This is mainly a refactoring with minor bug fixes.
The `createSwapChain()` is called at initialize and at swapchain
recreate. Before recreate there is always `queryAndAdjustSurfaceCaps()`
call, which queries current surface sizes and min image count. However,
surface capabilities may be queried again from `createSwapChain()` to
get compatible present modes and the min image count.
Problem is that surface caps `currentExtent` may change after the second
query in the `createSwapChain()`, while the `extents` parameter is
already calculated. Such situation will violate the specification.
To eliminate the possibility of the above problem and to simplify the
code, query of compatible present modes is moved to the
`queryAndAdjustSurfaceCaps()`. To save performance,
`mCompatiblePresentModes` is only updated if swapchain is already
invalid (recreate is imminent). Function is now also handles
`mEmulatedPreTransform` to further simplify the code.
The `mSurfaceCaps` member was replaced with local variable. The
`mIsSurfaceSizedBySwapchain` boolean is added instead to check it in the
`getUserWidth()`/`getUserHeight()` methods. This also fixes a possible
bug (anglebug.com/168327817) on Fuchsia when this expression could be
false:
mSurfaceCaps.currentExtent.width == kSurfaceSizedBySwapchain
This is because previously `queryAndAdjustSurfaceCaps()` updated
`mSurfaceCaps` with the values from `getCurrentWindowSize()`. It
seems that the bug never happened on practice, otherwise the ASSERT
in the same function would fail.
The `prepareForAcquireNextSwapchainImage()` is used at initialize
instead of `createSwapChain()` to remove code duplication.
Fixed (anglebug.com/168327817) checking `mPreTransform` without enabled
"enablePreRotateSurfaces" feature.
Bug: angleproject:397848903
Bug: angleproject:168327817
Change-Id: I02e8e3b815b30350e12476853d8dcffed3fe7c38
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6298736
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
ac251fa8
|
2025-02-24T17:31:58
|
|
Vulkan: Remove doDeferredAcquireNextImage ContextVk dependency
This is the continuation of the previous CL. After this change
`lockSurface()` calls `doDeferredAcquireNextImage()` as the rest of the
code do.
The `ImageHelper::invalidateSubresourceContentImpl()` required
`ContextVk` pointer before this change.
The `ContextVk` is only used to print the performance warning when
`layerIndex` exceed the maximum count, which is not possible in case of
a `WindowSurfaceVk`. Added `layerLimitReachedOut` pointer instead of
writing the warning. It is processed in
`invalidateSubresource[Stencil]Content()`. Added
`invalidateEntireLevel[Stencil]Content()` which do not require
`ContextVk` to use in the `WindowSurfaceVk`.
Bug: angleproject:397848903
Bug: angleproject:42264593
Change-Id: I58451a4818ad56fa196c3c971df3a5f7793f2bfe
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6298735
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
|
|
2f5a91ba
|
2025-02-24T17:25:10
|
|
Vulkan: Remove checkForOutOfDateSwapchain ContextVk dependency
This is the continuation of the previous CL. After this CL it is now
possible to call `prepareForAcquireNextSwapchainImage()` from
`lockSurface()` that will also do necessary swapchain recreation in
case of window resize.
These methods required `ContextVk` pointer before this change:
- RenderTargetVk::releaseImageAndViews()
- replaced with `releaseSwapchainImage()` that does not release
framebuffer because Window Surface framebuffers are not managed by
the cache.
- added `release()` method that does release the framebuffer.
- WindowSurfaceVk::releaseSwapchainImages()
- use `Renderer::collectGarbage()` instead of
`ContextVk::addGarbage()`.
- use `ImageHelper::releaseImage()` instead of
`ImageHelper::releaseImageFromShareContexts()`. The
`finalizeImageLayoutInShareContexts()` was not required since
renderpass must be already ended, because swapchain recreate is only
possible after present. Removal of `addToPendingImageGarbage()` is
not going to cause OOM problems, because repeated swapchain
recreate calls are not possible without swap (submissions).
Bug: angleproject:397848903
Bug: angleproject:42264593
Change-Id: Iacfa3a144aa980659569b7100be25a44ebb9f0a0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6298734
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|