|
cfeea900
|
2025-08-12T17:23:32
|
|
Vulkan: Don't require COLOR_ATTACHMENT_BLEND_BIT for YUV format
The only way to render to yuv texture is via EXT_yuv_target, but
EXT_yuv_target spec
https://registry.khronos.org/OpenGL/extensions/EXT/EXT_YUV_target.txt
explicitly said you have to disable blend: "Blending applies only if the
color buffer has a fixed-point format and non YUV space format color
buffer.". Thus when we check if format supports rendering, we should
exclude VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT if its YUV format.
Bug: b/432398245
Change-Id: If5bfa58db30465ab707f63f34dd6487d8a03652f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6843926
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
9d1edb4e
|
2025-08-08T18:21:03
|
|
Fix the assert on texture target to allow GL_TEXTURE_CUBE_MAP_ARRAY
Add anend2end test to verify glCopyImageSubData works.
Bug: b/419863436
Test: TextureCubeTestES32.CopyImageSubDataCubeMapArray
Change-Id: I2a569680ed20f05b4182045cb4bdf08d4c66d8df
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6832639
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Xiang Wang <xwxw@google.com>
|
|
5fb77159
|
2025-08-12T15:21:25
|
|
Add stubs for GL_ARM_texture_unnormalized_coordinates
Bug: angleproject:352345942
Change-Id: I05e2b0c83f07bfe35eb58fc657b834f6253d4cb9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6839660
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Shufen Ma <Shufen.Ma@arm.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
316e6831
|
2025-08-08T14:14:20
|
|
Vulkan: Support KHR versions of surface/swapchain_maint1
They are straight promotions of the EXT versions of the extensions.
Bug: angleproject:430106352
Change-Id: I889dfda99d8ad35de1672914e7cc73b2879be6a2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6832392
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
555b2328
|
2025-08-08T13:32:13
|
|
BindVertexBuffer should pick up buffer change in other context
Buffer is modified in the first context and calling glBindVertexBuffer()
of the same buffer on the second context should pick up the buffer
changes made in first context.
Bug: b/433331119
Change-Id: I694f66b38b11b87e0efa8d9b939f8384120823af
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6830125
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
41e44587
|
2025-08-06T20:04:23
|
|
BufferBindingMask in VertexArray::onBufferChanged are same buffer
The bufferBiningMask bits received from VertexArray::onBufferChanged()
must point to the same buffer, in case of one buffer is bound to
multiple binding points. We can do some minor optimization here when we
loop the BufferBindingMask bits: We only need to calculate hasConflict
once when we call updateCachedTransformFeedbackBindingValidation().
Bug: b/433331119
Change-Id: I9f7cfa543deb46cd369915293b97f5d3122e1708
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6826782
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
d63cff37
|
2025-08-06T13:31:02
|
|
Fix bug when rebind the same buffer not pick up the change
Buffer is modified in one context and rebind the same buffer on the
second context should pick up the buffer changes.
Bug: b/433331119
Change-Id: I8085fe826c339692881f2d3d6515efb19bbc4a88
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6825767
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
7c8e357c
|
2025-07-15T17:24:25
|
|
Fix NULL handling in glGetAttachedShaders and ShaderPrecisionFormat
Fix the case where passing NULL to the shaders parameter in
getAttachedShaders and to the range and precision parameters in
getShaderPrecisionFormat would trigger assertions.
Bug: angleproject:431900689
Change-Id: I0d01bbb0d13f9a4704b47066c85ac7c1368534a0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6733749
Auto-Submit: Tingwei Guo <tingwei.guo@arm.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
d8dc3cc2
|
2025-08-02T12:02:20
|
|
Remove shared context lock from glVertexAttrib{I}Format
This CL removes shared context lock from glVertexAttribFormat() and
glVertexAttribIFormat() APIs, since they no longer access anything
outside VertexArrayPrivate. The main problem I had run into is
validation code. Before this CL, ValidateIntegerVertexFormat() needs
context's mStateCache for mCachedVertexAttribTypesValidation and
mCachedIntegerVertexAttribTypesValidation. Given these two cached value
are constant after initialization, in this CL, I have moved them to
PrivateStateCache. PrivateStateCache argument is added to
ValidateVertexAttribFormat() and ValidateVertexAttribIFormat() to get
them access to mCachedIntegerVertexAttribTypesValidation.
Bug: b/433331119
Change-Id: Ifc3fbed32b4d3722c335dd2c393bc6519ed0b544
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6822032
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
c39f1d0f
|
2025-08-01T15:44:11
|
|
Move updateCachedTransformFeedbackBindingVali* to VertexArray
Since updateCachedTransformFeedbackBindingValidation needs buffer
argument, this is now moved from VertexArrayPrivate to VertexArray class
to make it obvious. Also mCachedTransformFeedbackConflictedBindingsMask
is per bindingIndex, so I have changed it from AttributeMask to
VertexArrayBufferBindingMask.
Bug: b/433331119
Change-Id: I321267637ba661b18ef236260a17e6e8f7043eb9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6814158
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
ae4aead5
|
2025-07-24T16:35:38
|
|
Remove sharedContextLock from glVertexAttrib{Divisor|Binding}
With prior CLs all the functions used by glVertexAttribDivisor*,
glVertexBindingDivisor and glVertexAttribBinding only access
VertexArrayPrivate. This CL removes shared context lock from these APIs.
Bug: b/433331119
Change-Id: Ib1632797c53d2cd7a31c21e93c0e69385c71a27f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6814157
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
328a205f
|
2025-08-07T11:02:12
|
|
Revert "Fix bug when reattach the same buffer not pick up the change"
This reverts commit a93f4c8d29c8d214e4823032e6e2c061d5dab1b1.
Reason for revert: https://issues.chromium.org/437092065
Bug: b/433331119
Original change's description:
> Fix bug when reattach the same buffer not pick up the change
>
> Added a test that the same buffer is used in two contexts. Buffer is
> modified in one context and reattached the same buffer on the second
> context's vertex array should pick up the buffer changes. This test
> exposed the bug and it is fixed in this CL.
>
> Bug: b/433331119
> Change-Id: Ia5675581857a642fe9727f196326da9af43d52cf
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6821923
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
> Commit-Queue: Charlie Lao <cclao@google.com>
Bug: b/433331119
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Change-Id: Iaa14b5dbbdb02c69bb060d5073072ec6ddd473ce
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6827998
Auto-Submit: Charlie Lao <cclao@google.com>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
|
|
a93f4c8d
|
2025-08-05T16:45:21
|
|
Fix bug when reattach the same buffer not pick up the change
Added a test that the same buffer is used in two contexts. Buffer is
modified in one context and reattached the same buffer on the second
context's vertex array should pick up the buffer changes. This test
exposed the bug and it is fixed in this CL.
Bug: b/433331119
Change-Id: Ia5675581857a642fe9727f196326da9af43d52cf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6821923
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
7a193b06
|
2025-08-06T13:50:50
|
|
Unthrottle validation error messages for all of Chromium
Chromium uses the debug callback to check if there were any errors
instead of glGetError(). With the previous change that throttled error
messages, some webgl tests failed to correctly recognize that an invalid
call did actually fail validation, as well as passthrough command
decoder fuzzer tests.
Bug: angleproject:423956139
Bug: chromium:436292490
Change-Id: Ida254c9bdd2137afcc9483cc1860254781338dbc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6823824
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
da8462d4
|
2025-08-06T05:44:28
|
|
Unthrottle validation error messages in WebGL
Chromium uses the debug callback to check if there were any errors
instead of glGetError(). With the previous change that throttled error
messages, some webgl tests failed to correctly recognize that an invalid
call did actually fail validation.
Bug: angleproject:423956139
Bug: chromium:436354527
Change-Id: Ic65761f412d3548fedd63f48d36357c9568c0b53
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6822578
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
f1c6e1a8
|
2025-08-04T19:55:02
|
|
Vulkan: Disable EXT_fragment_shading_rate
Due to a few dEQP failures, this extension will be
temporarily disabled. It can be reverted once the issues
have been resolved.
* Disabled fragmentShadingRateEXT for Vulkan.
Bug: b/436169197
Bug: angleproject:420310117
Change-Id: I94fbbb8b0a0866465e8c67e34c214b465fc35558
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6820702
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
394df705
|
2025-08-01T14:03:17
|
|
Cache per bufferIndex buffer properties in VertexArrayPrivate
This is another preparation CL. This CL caches per bindingIndex buffer
properties in VertexArrayPrivate: mCachedBufferPropertyMapped and
mCachedBufferPropertyMutableOrImpersistent. The only difference between
these and mCachedMappedArrayBuffers /
mCachedMutableOrImpersistentArrayBuffers is that one indexed by
attribIndex and another is indexed by bindingIndex. With this, when
attribute binding changes, we no longer need to make buffer access. With
this, we can move setVertexAttribBinding and setVertexBindingDivisor
from VertexArray into VertexArrayPrivate class and Context argument is
also removed.
Bug: b/433331119
Change-Id: I666544ee0585727ca92d640f372f5a64d1d85576
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6814156
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
bafe39e2
|
2025-07-14T16:07:51
|
|
Vulkan: Use BindIndexBuffer2 when available
This Vulkan API becomes available with VK_KHR_maintenance5. In
addition to the original args, it also takes the index buffer size.
* Added the necessary functions to use the following API:
vkCmdBindIndexBuffer2KHR()
* handleDirtyGraphicsIndexBuffer() now uses this API if maintenance5
is available.
Bug: angleproject:394337110
Change-Id: I9a650ac5a033b449da05e0c226e2cfb6df74a75c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6735725
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
eca5244d
|
2025-07-30T16:59:16
|
|
Remove buffer from VertexArrayState::setAttribBinding
In later CLs we try to remove shared lock from glVertexAttribBinding().
One of the lockers for that is right now setAttribBinding() references
"buffer" for size. This CL caches the per binding index bufferSize in
VertexArrayPrivate (i.e, std::vector<size_t> mCachedBufferSize).
setAttribBinding() moved from VertexArray to VertexArrayPrivate since it
no longer needs buffer access, but uses mCachedBufferSize instead.
This CL also changes std::vector to std::array for mVertexArrayBuffers
Bug: b/433331119
Change-Id: Ie34aef82379af8f04099cdc20ebdf354d2787a65
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6803592
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
91fa29be
|
2025-08-04T11:08:20
|
|
Add a feature to force contexts into debug mode
Bug: angleproject:423956139
Change-Id: Ie166b40eb9c241140daf4a35df3391829c64f84e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6817467
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
be43e317
|
2025-07-31T17:40:24
|
|
EXT_external_buffer should have DYNAMIC_DRAW usage
EXT_buffer_storage requires that BUFFER_USAGE must be DYNAMIC_DRAW.
EXT_external_buffer only mentions that the buffer can be sourced from an
external EGLClientBuffer. Therefore, the BUFFER_USAGE should still be
DYNAMIC_DRAW.
Add an end2end test.
Bug: angleproject:436046320
Change-Id: Ie79a1b1f8be0df4566bff26800599b192c4f70b1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6817076
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Aurora Zhang <Aurora.Zhang@arm.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
35023c8a
|
2025-07-31T17:40:45
|
|
Throttle validation error messages in release builds
Some apps make invalid but harmless calls every frame. ANGLE inserts a
debug message for each validation failure which comes with a performance
cost. This change makes ANGLE stop reporting validation failure messages
after a handful have already been reported. This is only done when
assertions are disabled and when the context is not a debug context.
Bug: angleproject:423956139
Change-Id: Ie3fb121b2686cddf7da98fc23422b5d12097c6fa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6805901
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
fa29f604
|
2025-07-02T13:23:31
|
|
Remove sharedContextLock from {Enable|Disable}VertexAttribArray
VertexArray objects are per context objects. In theory they do not need
to protected by shared context lock. The reason we are taking locks
because all these functions end up accessing Buffer object which are
shared. In prior CLs we have removed subject observer usage from
VertexArray which means VertexArray no longer accessed from other
thread. In prior CLs we also split VertexArray into two classes:
VertexArrayPrivate which has no buffer, and VertexArray which is
subclass from VertexArrayPrivate and owns buffer. In this CL,
glEnableVertexAttribArray and glDisableVertexAttribArray calls no longer
take shared context lock. ContextPrivateEnableVertexAttribArray and
ContextPrivateDisableVertexAttribArray are called from these two APIs
and they only have access to StatePrivate. State Private holds a
VertexArrayPrivate pointer, which means they do not have anyway to
access buffer objects. The main challenge I run into here is
mCachedActiveClientAttribsMask, mCachedActiveBufferedAttribsMask,
mCachedActiveDefaultAttribsMask, mCachedHasAnyEnabledClientAttrib,
mCachedNonInstancedVertexElementLimit,
mCachedInstancedVertexElementLimit. These StateCache variable needs to
be updated when these two APIs are called, and calculating these
variable needs access to buffer object. The solution here is adding a
bool mIsCachedActiveAttribMasksValid in the PrivateStateCache so that
instead of immediately update these mCached* variable, we just set
mIsCachedActiveAttribMasksValid to false. Then whenever any of these
mCached* variable is needed, we will check
mIsCachedActiveAttribMasksValid and calculate these cached variables. It
adds one if check when accessing these caches, but the other benefit is
that we may have avoided duplicated calculation when multiple states
changed.
Bug: b/433331119
Change-Id: I3227c72bc40501712db93fb3d540b835f07150b5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4514436
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
2ef85c24
|
2025-07-09T17:13:52
|
|
Vulkan: Add support for GL_EXT_fragment_shading_rate
Add support for GL_EXT_fragment_shading_rate.
Bug: angleproject:420310117
Change-Id: I7b368afc45baf8551c222b2569991269117d385b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6726817
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Panfeng Hou <panfeng.hou@arm.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
279652e3
|
2025-07-21T16:21:28
|
|
Vulkan: Flush more often due to render pass count
Accumulating too much workload before submission can lead to
stuttering and reduced quality in rendering. In this change,
a threshold is set for the number of render passes in order to
submit the command buffer.
* Added the following to ContextVk: mRenderPassCountSinceSubmit
* It is incremented every time a render pass begins in the command
buffer.
* When the count reaches the following threshold at the RP closure,
there is a submission: kMaxRenderPassCountPerCommandBuffer
* (Currently set to 128)
Bug: b/426439980
Change-Id: I4cde223fb81e6a27a61f78c924d3c9f2a082e995
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6775626
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
a1d5d102
|
2025-07-22T02:15:43
|
|
WGSL: Allow matrices as in/out vars in shaders
WGSL only supports scalars and vectors in in/out vars in shaders,
matrices will need to be broken into column vectors and then
put back together at the beginning (or end) of the shader.
Arrays also need to be split, which will be done in another CL.
Bug: angleproject:42267100
Change-Id: If1ba28c1b687ae0a3a5a554479f0ff0b5d9df39c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6777201
Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Liza Burakova <liza@chromium.org>
|
|
5fd368aa
|
2025-07-30T14:45:55
|
|
Replace Surface::getWidth/Height() with getSize()
Most places in the code use both `getWidth/Height()` methods at the same
time. On some back-ends it is more optimal to have single method.
For example, `WindowSurfaceWGL` first uses `GetClientRect()` Win32 API
inside each method to then calculate width and hight in each method,
causing repeated `GetClientRect()` call.
The only place where only one of the methods may be used is from
`SurfaceImpl::getUserSize()` when one of the parameters is `nullptr`,
which is only possible from `QuerySurfaceAttrib()` function. This
method is rewritten to use new `getSize()` method and then use whatever
dimensions is requested by the caller. This may cause
`QuerySurfaceAttrib()` inefficiency on some back-ends that get width and
height of the surface differently (`SurfaceEGL` for example). In such
cases `getUserSize()` is overridden to avoid returning a dimension
which is not required.
After this change all places in the code that previously used both
`getWidth/Height()` methods (like `Surface::getAttachmentSize()`) will
be more efficient. The `QuerySurfaceAttrib()`, on the other hand, will
have slightly more overhead on back-ends where base
`SurfaceImpl::getUserSize()` method is used, which only happens on
back-ends with trivial `getSize()` implementation.
Bug: angleproject:397848903
Change-Id: I4a22701a1e62ee4e7d07e77cac5b388050d98e4d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6802440
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
|
|
fa90dac8
|
2025-07-30T14:04:58
|
|
Revert "Vulkan: Disable VK_EXT_host_image_copy on Fuchsia"
This reverts commit d62db89e1753ece99633143faf4c87b2ff23f96c.
Reason for revert: It's been years, hopefully VVL is updated by now.
Bug: angleproject:8341
Original change's description:
> Vulkan: Disable VK_EXT_host_image_copy on Fuchsia
>
> An old version of VVL is used, causing incorrect failures.
>
> Bug: angleproject:8341
> Change-Id: I0fc605616671343a49fed6ff02ecd67eea672dca
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4873440
> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Bug: angleproject:8341
Change-Id: Ia7a8875b955a120c80d59f2ae7566648e055eedc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6804001
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4189fbb8
|
2025-07-29T17:50:24
|
|
Implement EGL_ANDROID_presentation_time for Vulkan backend
The implementation leverages the VK_GOOGLE_display_timing Vulkan
extension.
Bug: chromium:434977616
Bug: angleproject:42261214
Change-Id: I7e6c64eca6c01e7eb79d41dc5ef63311a7792e2b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6799254
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
92089dce
|
2025-07-29T14:09:24
|
|
Vulkan: Limit maxPerStageTextures to 4096
Many devices support a huge number of samplers (millions) and every one
needs a uniform location, either generated by ANGLE or assigned by the
user. Limit the number of samplers per stage to something reasonable,
which in turn also lowers the number of uniform locations.
This isn't expected to have any practical effect on real apps/users, but
is instead to keep tests for these limits (e.g., dEQP, end2end) within
reason in terms of shader program sizes and compilation times.
Test:
KHR-GLES31.core.explicit_uniform_location.uniform-loc-mix-with-implicit-max
Test: angle_end2end_tests
--gtest_filter=GLSLTest.VerifyMaxVertexUniformVectorsWithSamplers*
Bug: b/434763439
Change-Id: I378483fd869b9f5ebee21760eec4dec2dd793b92
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6798920
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
cd969c3e
|
2025-07-28T16:27:12
|
|
Vulkan: Disable clipCullDistance ext if GS/TS
The extension GL_EXT_clip_cull_distance also interacts with geometry
and tessellation shaders. These features are currently in development.
* Added temporary flag: supportsClipCullDistanceInGSAndTS
* Currently disabled by default
* clipCullDistanceEXT can only be enabled if this feature is enabled,
or if the device does not support geometry or tessellation shaders.
* After the features become available, this flag can be removed.
Bug: angleproject:42264006
Bug: b/415288635
Change-Id: Iac5c672fd980710519407c482bc95d2b0019aea2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6795025
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
3e52318c
|
2025-06-26T10:46:00
|
|
Vulkan: Ensure always using resolved Window Surface size
`WindowSurfaceVk::getWidth/Height()` methods return cached, previously
resolved Surface size. Using these methods while current Window Surface
size is unresolved may return stale values, causing undesired behavior.
Appropriate ASSERTs were added to these methods to prevent such usage.
Added ASSERTs revealed few places with incorrect usage:
- In `Context::makeCurrent()` to set initial viewport or for capture.
- In `IsPartialBlit()` and `ValidateReadPixelsBase()` validations.
- In `SerializeFramebufferAttachment()` during capture.
Rest of the code was thoroughly checked if it is possible to call
`WindowSurfaceVk::getWidth/Height()` when size is unresolved. All other
places always call these methods after framebuffer state
synchronization, which acquires swapchain images and resolves the
surface size.
Added `ensureSizeResolved()` method that is called during validation and
in the `SerializeFramebufferAttachment()` method. It is possible to use
existing `Framebuffer::syncState()` method as alternative, but this
solution was discarded since it may potentially interfere with
`State::syncDirtyObjects()` method.
The `Surface::getUserSize()` replaces old methods as optimization, to
prevent calling relatively expensive method twice from
`Context::makeCurrent()` to get width and height of the `drawSurface`.
Test: angle_trace_tests --gtest_filter=EGLSurfaceTest.ResizeBeforeMakeCurrent/*
Test: angle_trace_tests --gtest_filter=EGLSurfaceTest.ResizeBeforeMakeCurrentPostSizeQuery/*
Test: angle_trace_tests --gtest_filter=EGLSurfaceTest.ResizeAndReadPixelsRobustANGLE/*
Test: angle_trace_tests --gtest_filter=EGLSurfaceTest.ResizeAndBlitFramebufferANGLE/*
Bug: angleproject:397848903
Change-Id: I082e13d0b8db5fd7d08ff25b102df1f283e1256d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6792928
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b4d84458
|
2025-05-23T18:08:19
|
|
Move Buffer from VertexBinding to VertexArray
In later CL we will not taking shared context lock for certain
VertexArray API calls. VertexArray itself is per context, so this sounds
reasonable to do. The main challenge here is a lot of VertexArray
function end up accessing gl::Buffer object, which could be modified by
other shared contexts. In order to safely not taking the shared context
lock, we need to separate out Buffer object out of VertexArray itself so
that these lockless APIs will take VertexArray that does not have access
to buffer.
In this CL, VertexArray is split into two classes: VertexArrayPrivate is
everything in VertexArray except buffers. VertexArray is a subclass of
VertexArrayPrivate and owns all the buffers. Buffer is removed from
gl::VertexBinding class. In order to let back end access to buffers,
VertexArrayImpl holds a weak reference to
VertexArray::mVertexArrayBuffers (which is a vector of buffers).
Further, VertexArrayBufferBindingMask mBufferBindingMask is moved from
VertexArrayState into VertexArray class well, since it tracks which
index has a non-null buffer. The bulk of change are due to the
VertexARrayImpl constructor change, since it now takes
vertexArrayBuffers argument. Other bulk of changes are due to
VertexBinding no long has the buffer, but you need to get it directly
from VertexArray or VertexArrayImpl.
This CL also reverts some of the change in crrev.com/c/6758215 that
mVertexBindings no longer contains kElementArrayBufferIndex.
BYPASS_LARGE_CHANGE_WARNING
Bug: b/433331119
Change-Id: I15f4576f7c5c8d8f4d9c9c07d38a60ce539bfeea
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6774702
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
8dca0efe
|
2025-07-21T15:29:10
|
|
Replace VertexArray::DIRTY_BIT_LOST_OBSERVATION with API call
This dirty bit was added so that back end can inspect buffers and set
proper VertexArray::DirtyBitType. The same thing can achieved by add a
virtual function on VertexArrayImpl class. The advantage of virtual
function on VertexArrayImpl is that all back end essentially have the
same implementation and we can just implemented in VertexArrayImpl
instead of duplicate in each back end. The other advantage is after this
CL DIRTY_BIT_BINDING_n and DIRTY_BIT_BUFFER_DATA_n will be well aligned
instead of offset by 1 caused by DIRTY_BIT_LOST_OBSERVATION. The other
motivation of this change is in later CL I want to move
mBufferBindingMask out of VertexArrayState, which means back end will
not have access to it. By using VertexArrayImpl API, I can pass
mBufferBindingMask directly to the back end via function parameter. So,
this CL removed DIRTY_BIT_LOST_OBSERVATION, added
VertexArrayImpl::checkBufferForDirtyBits().
Bug: b/433331119
Change-Id: I5c8cbc9bace63db416e86c2ae3631f74a12b20b8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6775986
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
130fb2a1
|
2025-07-29T08:16:57
|
|
Vulkan: Don't allocate ExternalFormatIDs for sampling usecases
Update the condition for allocating YUV ExternalFormatIDs to exclude
sampling-only usecases. Also, rename "isYuvResolve()" to
"isYuvExternalFormat()" to better reflect intent.
Bug: angleproject:386749841
Change-Id: I0e4f5b79937ea8ad98b5d00fdc7531b34ffa7e16
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6797965
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
40a2a912
|
2025-07-15T14:39:10
|
|
Track mElementArrayBuffer in std::vector<VertexBinding>
Right now mElementArrayBuffer are treated a little bit differently from
other vertex buffers, mainly because of elementBuffer does not have
corresponding "attributeIndex" to bind to. But a lot of logic in
VertexArray are same for mElementArrayBuffer and mVertexBindings. In
recent CLs, we are using mBufferBindingMask to track both
mElementArrayBuffer and mVertexBindings with kElementArrayBufferIndex
represents element buffer. With that, some of logic handling buffers can
be merged, with looping of mBufferBindingMask bits. In later CL, we are
going to separate "binding" from "buffer" so that we can move buffer out
of VertexArrayState class. So this is also a preparation CL so that when
we move buffers out of VertexArrayState class, it does so for all
buffers (both element buffer and vertex buffers). In order to track how
many vertex buffers in mVertexBindings, a new variable
mMaxVertexAttribBindings is added. In later CL when we move buffers out
of VertexBinding, some of this CL's change will be reverted back,
mVertexBindings will be reverted back to track only bindings and
mMaxVertexAttribBindings will be deleted.
Bug: b/433331119
Change-Id: Idd2cfe4ce64bb22923bac70abb752e132fe1abd3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6758215
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
4f4eab29
|
2025-06-30T14:58:28
|
|
Reset index buffer offset between indirect GL_LINE_LOOP draws
In two consecutive glDrawArraysIndirect with GL_LINE_LOOP mode, and
bound to a different Indirect Buffer, the variable value captured
through TransformFeedback is the same as the first result when the
second DrawArraysIndirect.
When calling DrawArraysIndirect the second time, DIRTY_BIT_INDEX_BUFFER
should be set to dirty so that it re-gets INDEX BUFFER to get the
correct result.
Bug: angleproject:428561247
Change-Id: I7f4ebb53e20cf8e362e67679b45185b8b68c56ef
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6687309
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Auto-Submit: Tingwei Guo <tingwei.guo@arm.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
866370dc
|
2025-07-28T22:12:00
|
|
Disable texture_compression_astc_decode_mode exts during capture
The GL_EXT_texture_compression_astc_decode_mode and
GL_EXT_texture_compression_astc_decode_mode_rgb9e5 extensions are
not widely supported outside of ARM and Qualcomm. Disable while
ANGLE capture is enabled.
Test: angle_trace_tests --gtest_filter=*whiteout_survival
Bug: b/434819166
Change-Id: I4cebf6942144c61a954dfd9dfe9bd9935638ff60
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6794776
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
9635df8e
|
2025-07-16T15:13:19
|
|
Move mCached*ArrayBuffers from VertexArrayState to VertexArray
The three cached AttributeMasks variables are mCachedMappedArrayBuffers,
mCachedMutableOrImpersistentArrayBuffers,
mCachedInvalidMappedArrayBuffer. They are currently declared in
VertexArrayState class. They are only accessed by VertexArray front end,
back end does not use them, which means they do not need to be in
VertexArrayState class. This CL moves these three variables to
VertexArray class in preparation for later CLs that VertexArrayState
will not have access to Buffer objects.
This CL also removed unnecessary
updateCachedMutableOrNonPersistentArrayBuffers call from
VertexArray::enableAttribute, since
mCachedMutableOrImpersistentArrayBuffers does not depend on any
variables enableAttribute() is modifying.
Bug: b/433331119
Change-Id: I8b1f0c7d511dbc6858d20f33863154e8fe3077f8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6762902
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
214a48c4
|
2025-07-16T12:42:18
|
|
Vulkan: add support for yuv resolve with transient image
Add support for the YUV_target extension in cases where the
implementation supports VK_ANDROID_external_format_resolve without
supporting nullColorAttachmentWithExternalFormatResolve.
Bug: angleproject:386749841
Tests: ImageTest*YUV*
Change-Id: Iebcb4f843b962f3d0d2f4e42db479902b6c1f849
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6761834
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
e4007fff
|
2025-07-24T15:50:48
|
|
GL: Remove ARB_base_instance check for EXT_base_instance support
This is a speculative fix for reported flickering issues on Linux.
https://chromium-review.googlesource.com/c/angle/angle/+/6580170 changed
EXT_base_instance to only be supported when it is not emulated and fixed
the condition to include ARB_base_instance, possibly hitting driver bugs
on some devices.
Bug: angleproject:355645824
Bug: chromium:427956856
Change-Id: I869fa7f618e82ad46c1953f0bacef0767bbc793e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6777576
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
6a03109f
|
2025-07-09T18:24:31
|
|
Refine getCompressionRate
As Vulkan spec states, vkGetImageSubresourceLayout should not be called
for the android swapchainimage when the image is not bound to memory.
Refine the path of getCompressionRate to make sure at least
swapchainimage[0] has been initialized when it is been called.
Bug: angleproject:433057375
Change-Id: I80b68874686940c0ef77df97b928b0e153c5bbf8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6774721
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d38531e8
|
2025-07-23T09:39:11
|
|
Fix extension check for xfb mode validation
With geometry and tessellation shaders, it's possible to use different
primitive modes between transform feedback and draw, as long as they are
from the same class.
The code accidentally allowed this only if both extensions are
supported, but it should be allowed if either is.
Bug: angleproject:428561247
Change-Id: Ia18d4ac15a3d0739ce18dc0e1f3d3f0b1aea621c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6780744
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7181239d
|
2025-04-04T14:13:58
|
|
Add long ANGLE traces feature
Enables very long Android captures by swapping binary
data chunked buffers to/from disk.
Bug: b/425728227
Change-Id: I539f72590eece03cfc69d42fc34be9825a9ff1fe
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6476924
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
|
|
cf4c8c2a
|
2025-07-10T15:50:36
|
|
Add max sampler count to maxUniformLocations
OpenGL ES 3.2 Spec:
> ## 7.6. UNIFORM VARIABLES
>
> When a program is linked successfully, all active uniforms, except for
> atomic counters, belonging to the program object’s default uniform
> block are initialized as defined by the version of the OpenGL ES
> Shading Language used to compile the program. A successful link will
> also generate a location for each active uniform in the default
> uniform block which doesn’t already have an explicit location defined
> in the shader. The generated locations will never take the location of
> a uniform with an explicit location defined in the shader, even if that
> uniform is determined to be inactive. The values of active uniforms in
> the default uniform block can be changed using this location and the
> appropriate Uniform* or ProgramUniform* command (see section 7.6.1).
> These generated locations are invalidated and new ones assigned after
> each successful re-link. The explicitly defined locations and the
> generated locations must be in the range of 0 to the value of
> MAX_UNIFORM_LOCATIONS minus one.
Currently, ANGLE sets the mNativeCaps.maxUniformLocations to the maximum
number of supported uniform variables (maxUniformVectors). However,
samplers are also uniforms and consume uniform locations during shader
linking. This causes shader compilation to fail for context versions
3.1+ if a shader uses both the maximum number of uniform variables and
maximum number of samplers because the number of uniform locations is
exceeded.
This specific edge case is being tested by the end2end test
GLSLTest.VerifyMaxVertexUniformVectorsWithSamplers. Unfortunately, that
test is only instantiated for GLES 2.0 and 3.0 and ANGLE's shader linker
only validates the number of supported uniform locations are not
exceeded for GLES 3.1+, so that error path is not being validated.
1. Include both the maximum number of supported uniform variables and
maximum number of samplers whe calculating the supported maximum
number of uniform locations.
2. Instantiate GLSLTest.VerifyMaxVertexUniformVectorsWithSamplers for
GLES 2.0, 3.0, 3.1, and 3.2 so the edge cases are tested for all
supported GLES versions.
Bug: b/279980674
Test: angle_end2end_tests
--gtest_filter=GLSLTest.VerifyMaxVertexUniformVectorsWithSamplers*
Change-Id: I8ad1f4d2a040a189625d516b54bf2f79ef218edc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6724940
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
bc9ff5e6
|
2025-07-11T13:43:05
|
|
Don't cache shaders/programs that are too large
Currently, ANGLE compresses and caches every shader program, but can
then fail to decompress the cached program because the uncompressed size
is too large.
Instead, check if the program size is too large before compressing and
caching the program, so ANGLE doesn't generate an error later while
attempting to decompress the cached program.
This change is applied to both shaders and programs:
* MemoryShaderCache::putShader()
* MemoryProgramCache::putProgram()
Bug: b/279980674
Change-Id: I67a3b542b460a41dbbc4a3d8bad4031a212223e0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6728876
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Tim Van Patten <timvp@google.com>
|
|
b7582680
|
2025-02-24T18:04:32
|
|
Reland: 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.
Always enable the null compiler backend. It has almost no binary size
cost and is now potentially used when the null ANGLE backend is not
enabled.
Bug: angleproject:398857482
Change-Id: Id528189ccbbacb1c444eacb151baadfda9fcc04b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6488609
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
ab74884c
|
2025-07-22T20:46:05
|
|
FrameCapture: Check current state for indexed buffers
When checking whether we need to set per draw buffer
blend state, we don't care whether they differ from
default, we only care if they differ from each other.
The non-indexed commands will set the same state for
all buffers.
This CL removes default state from the check. Otherwise,
we are getting a block of identical indexed commands:
glBlendFuncSeparateiEXT(0, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBlendFuncSeparateiEXT(1, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBlendFuncSeparateiEXT(2, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBlendFuncSeparateiEXT(3, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBlendFuncSeparateiEXT(4, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBlendFuncSeparateiEXT(5, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Which is equivalent to:
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Test: Honkai Impact 3rd trace
Bug: b/433331917
Change-Id: Ie6bd7549d69c1548aace92126312527b8e585046
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6780135
Reviewed-by: Mark Łobodziński <mark@lunarg.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
4e81cd79
|
2025-07-21T10:45:02
|
|
FrameCapture: Update context limits
We're seeing multiple titles run incorrectly without
updating these two limits during capture.
I've verified locally that these still fit within the
limits of all modern devices we're looking at.
If there are any problems with older devices, we can
address them with:
addIntegerPrerequisite(GL_MAX_DRAW_BUFFERS_EXT, 6);
addIntegerPrerequisite(GL_MAX_VERTEX_UNIFORM_VECTORS, 4096);
Bug: b/431854319
Bug: b/433331917
Change-Id: Id21de17acc4d24157dfe07de6b9de818561399ba
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6775624
Reviewed-by: Mark Łobodziński <mark@lunarg.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
cdffecb7
|
2025-07-21T11:30:45
|
|
Vulkan: Ensure FramebufferVk::mRasterizationSamples > 0
GraphicsPipelineDesc can't handle samples being zero. This CL ensures we
always use at least one sample.
Bug: angleproject:431250668
Change-Id: I7f6b14c6060585fe7ef6fb55ed6a4b9813634f3f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6431827
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
239763d9
|
2025-04-04T17:52:10
|
|
CL/VK: Fix ArgumentWorkgroup setArg logic
Issue was that clSetKernelArg for ArgumentWorkgroup
type arguments would blindly push new values into
kernel's spec-constant FastVector on every clSetKernelArg
(even on same arg updates).
This would lead to over-pushing due to same arg updates,
which caused all kinds of issues, mainly erroneous misses
in compute pipeline cache since the key is based on
VkSpecializationInfo.
Since kernel object already keeps a vector of kernel args,
we don't need a separate spec-constant FastVector in CLKernelVk to
track this. Remove it and derive the spec-constant data
from the kernel args themselves.
Bug: angleproject:366415134
Tests-Passing: Geekbench-6.2.2 - Workloads: [ 401 & 601 ]
Change-Id: Iab7f27fdfdfede33881e1dd717ba3b771cffb985
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6773615
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
251ffe62
|
2025-07-15T17:37:30
|
|
Vulkan: Add support for built-in gl_ShadingRateEXT
Add support for built-in gl_ShadingRateEXT of
GL_EXT_fragment_shading_rate
Bug: angleproject:420310117
Change-Id: Ie11b139a0371b5995f1533a85e02c590cd36109c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6733750
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
9cd9a0d5
|
2025-07-18T10:28:12
|
|
Vulkan: Reformat VVL Error Message
Remove the following members from the SkippedSyncvalMessage struct:
const char *messageContents1
const char *messageContents2
Future VVL suppression message should use extraProperties list only.
Bug: angleproject:391284743
Change-Id: I72ebaf86da667967681318dd69a181cc685f0805
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6769428
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
7b36840b
|
2025-07-17T18:12:53
|
|
Fix missing includes
This is to fix some errors in
https://ci.chromium.org/ui/p/chromium/builders/ci/linux-modules-compile-fyi-rel/42032/overview
Bug: chromium:40263312
Change-Id: I278fd42062a52cbfe7e778f98d3e72cdd490847f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6765303
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Auto-Submit: Takuto Ikuta <tikuta@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
de6d58f4
|
2025-07-13T19:24:34
|
|
FrameCapture: Fix blend state per draw buffer in MEC
Before this CL, we've never set starting state for draw
buffers other than buffer zero. They've always remained
at default values, or at least matching the values set
for zero.
Now when we detect the other buffers differ from buffer
zero, we emit indexed calls that set them correctly.
Turning a sequence like this:
glEnable(GL_BLEND);
glBlendFuncSeparate(GL_SRC_ALPHA, ...);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
into this:
glEnableiEXT(GL_BLEND, 0);
glBlendFuncSeparateiEXT(0, GL_SRC_ALPHA, ...);
glBlendFuncSeparateiEXT(1, GL_SRC_ALPHA, ...);
glEnableiEXT(GL_BLEND, 2);
glBlendFuncSeparateiEXT(2, GL_SRC_ALPHA, ...);
glColorMaskiEXT(2, GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
glEnableiEXT(GL_BLEND, 3);
glBlendFuncSeparateiEXT(3, GL_SRC_ALPHA, ...);
glColorMaskiEXT(3, GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
glColorMaskiEXT(4, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glColorMaskiEXT(5, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
Test: Wuthering Waves trace
Bug: b/431854319
Change-Id: Ic91d4b8cf50defd8b69ecf6aac697d0df8f69692
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6735677
Reviewed-by: Mark Łobodziński <mark@lunarg.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
890b5d8f
|
2025-07-07T13:06:54
|
|
Vulkan: Encapsulate more descriptor set logic in ProgramExecutableVk
- ProgramExecutableVk handles SharedDescriptorSetCacheKey updates
- Inline most update*DescInfo methods
- Add dedicated methods to handle uniform and storage buffers to remove
some branches from frequently used code paths
Bug: angleproject:426412564
Tests: UniformBufferTest31.UniformBufferBindingRangeChangeWith*FBF
Change-Id: I54b8ae2bd8778231e4d187b2cfd30f4d71de7f3b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6733546
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
d3119b0a
|
2025-07-07T09:35:04
|
|
Relax shader interface matching for program link
ES spec 3.2 section 7.4.1 shader interface matching: With separable
program objects, interfaces between shader stages may involve the
outputs from one program object and the inputs from a second program
object. For such interfaces, it is not possible to detect mismatches
at link time, because the programs are linked separately.
Before this CL, we are applying the the number of output varying and
the number of input varyings must match requirement to both glProgram
object as well as glPipelineProgram object which is incorrect. This
CL removes such check from Program::linkVaryings. A new function
LinkValidateInOutNumberMatching is added to handle the this program
pipeline specific spec requirement.
Bug: angleproject:424050949
Change-Id: I0d2e4360b37d175b2b998e341f15815915771413
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6704827
Reviewed-by: Charlie Lao <cclao@google.com>
Auto-Submit: Shufen Ma <Shufen.Ma@arm.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
3f170c17
|
2025-07-11T15:35:01
|
|
Roll third_party/dawn/ (1684 commits) and clean up WGPU_BREAKING_CHANGEs
With this roll, Dawn has completed the WGPU_BREAKING_CHANGE_* changes,
so the old paths are no longer used.
The roll:
https://dawn.googlesource.com/dawn.git/+log/7a8946456d49..d85fc050fef7
Created with:
roll-dep third_party/dawn
Bug: chromium:427242889
Change-Id: Ia17fbc1447944e7bcea20d5004367d94cf7be10e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6729918
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
93b659f9
|
2025-07-04T12:35:29
|
|
Remove PoolAllocator push/pop feature
PoolAllocator would manage a stack of memory pools upon client
calling push() and pop(). This made the code unnecessarily complicated.
The feature was only used with nesting of one, to mark the memory
unused after a shader compile.
Fix by removing the push/pop feature. Instantiate PoolAllocator in
places the previous push() was and uninstantiating instead of previous
pop().
This removes the feature where the PoolAllocator would hold on to
the allocated memory in order to reuse it. This is seen as a
progression: the allocator is held by the compiler, the compiler is
held by the shader and each shader typically see only one compile.
Thus the free pages were just leaking unused until the shader was
destroyed. Instead, destructing the PoolAllocator instead of pop()
will donate the memory back to platform/OS, where it is likely
more useful.
To preserve existing Vulkan behavior, add PoolAllocator::reset()
which would mark the memory unused but leave them reserved for the
PoolAllocator.
Removes UB where PageHeader::nextPage would be accessed after
~PageHeader.
Bug: angleproject:429513168
Change-Id: I21e58b46e0887380db3a2cab5ce22f0042cfae9e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6701153
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
03356f06
|
2025-07-10T19:21:04
|
|
Vulkan: Skip VK_KHR_maintenance9 warning
A warning has been added about behavior that will
change if VK_KHR_maintenance9 is enabled.
Since we can't make this change until drivers support
the feature, let's add warning that will fire when we
do decide to turn it on.
This CL:
- Adds a feature for maintenance9
- Adds a VVL skip if isn't enabled
- Updates our skip code to check for message IDs
Test: Traces
Bug: angleproject:429339330
Change-Id: I5763cbc5f343ef165ff8810b9b60b8c809075b8f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6724905
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
065b80a6
|
2025-07-10T15:50:43
|
|
Vulkan: Remove the enum to indicate submitted CB
Currently, the function ContextVk::submitCommands() takes the
following enum to indicate whether all command buffers or only
the outside command buffer is submitted: "Submit"
However, ContextVk::submitCommands() is only called twice. Also,
this enum is only used to manage a few things, such as garbage
collection, and finalizing foreign image layouts.
It is possible to move these operations to the respective callers
and remove this enum completely.
* Moved the operations relying on the enum "Submit" to the locations
before submitCommands() as required.
* Removed the enum "Submit".
(Credit for the idea to move the ops up to the callers: cclao)
Bug: b/425987310
Change-Id: Ic0e1c15ee3d2e7cf22a4f7a57b6ac31acc38c861
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6724899
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
68fa8169
|
2025-07-09T18:02:16
|
|
Vulkan: Reformat VVL error message
Remove the VVL that is no longer observed on bots.
Reformat the other VVL to use extraProperties only.
Bug: angleproject:40644740
Change-Id: I57da1259754d5eba18c8c11385872b3ec9527e09
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6719618
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
3b90872b
|
2025-07-06T09:02:27
|
|
Vulkan: Selectively invalidate uniform buffers
Call invalidateCurrentShaderUniformBuffers iff current program
has active uniform buffers. Also add DIRTY_BIT_UNIFORM_BUFFERS bit
to mNew*CommandBufferDirtyBits
Bug: angleproject:426412564
Bug: angleproject:429585235
Tests: UniformBufferTest31.UniformBufferBinding*WithMultiplePrograms*
Change-Id: I88c37c8317205aecad638553846ffe3beff87f11
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6706537
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
6d18ed63
|
2025-07-08T16:26:53
|
|
ValidateGetTexLevelParameterBase: Remove ES 2.0 check
This CL addresses review comments in:
https://crrev.com/c/6710993
1. Remove the ES_2_0 check for GL_MEMORY_SIZE_ANGLE in
ValidateGetTexLevelParameterBase() since the GL_ANGLE_memory_size
extension already requires OpenGL ES 2.0, making the version check
redundant.
2. Update the test MemorySizeTest.BasicUsageTexture to use the function
glGetTexLevelParameterivANGLE() if the context version is below OpenGL
ES 3.1 and the extension GL_ANGLE_get_tex_level_parameter is available.
Bug: b/409384875
Change-Id: I831d4b35eec20fcb4aff331c5a642a749bd52e67
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6715885
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
41a5b397
|
2025-07-09T09:17:10
|
|
Vulkan: Fix checking if fds are identical
This helps to decide whether it's really disjoint or not.
Bug: angleproject:426480610
Change-Id: I8ec9b352195ab16a7e11d2dab30e98138d9f5a6c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6658648
Reviewed-by: mohan maiya <m.maiya@samsung.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
7b5a8096
|
2025-07-09T06:26:21
|
|
Vulkan: Enable varyingsRequireMatchingPrecisionInSpirv for Samsung
Bug: b/430501085
Change-Id: Iac5061c5d33642af1e53a990487833c26df45b30
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6717687
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
30a1cbc9
|
2025-07-03T13:00:05
|
|
Vulkan: Separate out descriptor set for uniform buffers
Bug: angleproject:426412564
Change-Id: Icdbb1e634fc543714d1e3b9cdba0530d400cb153
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6705153
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
d44244ca
|
2025-07-03T11:36:37
|
|
Vulkan: Simplify default uniform WriteDescriptorDescs
ProgramExecutableVk fully encapsulates interaction with
DescriptorSetDescBuilder with https:://crrev.com/c/6702410
which allows us to keep WriteDescriptorDescs members private.
Remove mDefaultUniformWriteDescriptorDescs and reuse
mDefaultUniformAndXfbWriteDescriptorDescs for both emulated and
extension based XFB codepaths
Bug: angleproject:426412564
Change-Id: Icf76440b6efbda93eb8d48c36591a99ccd1a5750
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6705152
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
ce289330
|
2025-07-01T19:41:46
|
|
Vulkan: Simplify descriptor set management
- Descriptor logic is contained in ProgramExecutableVk and
doesn't leak into ContextVk
- Reduces CPU overhead by not having to constantly copy and
resize the DescriptorSetDescBuilder
- Simplifies decoupling of descriptor set of uniform buffers
from that of other shader resources
Bug: angleproject:426412564
Change-Id: Ic0926d0d466ea21f611c2b2c7b844e0bb9027c1b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6702410
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
8a9fe208
|
2025-06-20T16:32:11
|
|
Vulkan: Fixed rate compression not work as expected on Android
On Android C++ compiler do more optimization and results different with
Linux, re-write code to correct the issue.
Bug: angleproject:352364583
Change-Id: I1863d2d255cd831d4ca9dd866c85e419f410bd9a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6687014
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Neil Zhang <Neil.Zhang@arm.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
18091004
|
2025-06-19T16:50:58
|
|
GLES1: Skip updating vertex attrib array when binding zero texture
Previously, when usecases bind the zero texture, the vertex attrib
array was disabled. This made the following bound textures lose the
vertex attrib data.
In this change, updating vertex attrib array in prepareForDraw()
is skipped when the application binds zero texture but does not
activate the corresponding texture unit.
Also GLES1 tests using zero texture are added to make sure vertex
attrib array is enabled correctly.
Test: angle_end2end_tests --gtest_filter=DrawTextureTest.*
Bug: b/426740680
Change-Id: Ic5aad0a60c9d987edcb1d05cdb6b68dd93eac309
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6659335
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
2e9de3c7
|
2025-07-07T16:58:18
|
|
ValidateGetTexLevelParameterBase: Support GL_MEMORY_SIZE_ANGLE
ANGLE supports the extension GL_ANGLE_memory_size, which adds the new
parameter GL_MEMORY_SIZE_ANGLE. However, the parameter value is not
supported in ValidateGetTexLevelParameterBase(), so any calls using it
always fail with GL_INVALID_ENUM.
The parameter is supposed to be tested by
MemorySizeTest.BasicUsageTexture/*, but the portion of the test
validating GL_MEMORY_SIZE_ANGLE is never executed because it requires an
OpenGL ES 3.1+ context, but the test is only instantiated for GLES 2.0
and 3.0.
Based on all the above:
1. Add support for GL_MEMORY_SIZE_ANGLE to
ValidateGetTexLevelParameterBase(), requiring GLES 2.0+ and the
extension memorySizeANGLE is enabled.
2. Instantiate MemorySizeTest to run on GLES 2.0, 3.0, 3.1, and 3.2, so
the entire test is run on devices that support GLES 3.1+ contexts.
Bug: b/409384875
Test: angle_end2end_tests --gtest_filter=MemorySizeTest.*
Change-Id: I70c5721c5da18cb8edbc9a7e18038d5d9fb486da
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6710993
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Tim Van Patten <timvp@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
52005af1
|
2025-07-02T16:11:30
|
|
Define angle_use_gbm=false when !angle_has_build
angle_use_gbm is not defined when !angle_has_build. This causes
build to fail. Define it to false in this case.
Bug: angleproject:425569857
Change-Id: I8ba66f528b3052725467aeafe046900ec06b8989
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6701310
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Commit-Queue: Kramer Ge <fangzhoug@chromium.org>
|
|
2269011c
|
2025-06-30T14:08:11
|
|
Remove BitSet::to_ulong and BitSetArray::to_ulong
BitSet::to_ulong() is a bit redundant with bits(), and has a risk of
losing upper bits on windows platform where unsigned long is 32 bit.
This CL removes the usage of it and replaced with bits().
BitSetArray::to_ulong() method only captures up to 64 bits, all other
bits are dropped silently which is wrong. This CL fix this and serialize
it as a vector of uint64_t. BitSetArray::to_ulong() is removed in this
CL.
Bug: angleproject:42264163
Change-Id: I663b2cdacc0e930ee616e333131e831ec124a9d4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6691283
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
2f8193ec
|
2025-06-25T13:17:47
|
|
Validate buffers bound for transform feedback are not modified.
The ES spec says it is undefined to write to a buffer that is currently
being used for transform feedback output but recommends generating an
error. Generate INVALID_OPERATION in this case.
Bug: chromium:427162086
Change-Id: I727d18c2035509fe2e5d60680eb5198e40a60e33
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6673310
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org>
|
|
9a05a2b7
|
2025-06-23T16:24:13
|
|
Reland "Vulkan: Avoid some loops in VertexArray::onBufferChanged"
This reverts commit 5df85793c602d64d47ef68e29542313be4116bc0.
Reason for revert: the regression bug is fixed
Some of the functionality related code has been merged into previous CL.
This CL now mostly clean up. The old subject/observer code is been
deleted from VertexArray.
Bug: angleproject:400711938
Original change's description:
> Revert "Vulkan: Avoid some loops in VertexArray::onBufferChanged"
>
> This reverts commit 8d6d127acc1072488e5b57ba4e7e93da2d94bfda.
>
> Reason for revert: https://issues.chromium.org/427064102
>
> Bug: angleproject:400711938
> Original change's description:
> > Vulkan: Avoid some loops in VertexArray::onBufferChanged
> >
> > Before this CL, VertexArray::onBufferChanged() loops over
> > bufferBindingMask bits and calls onSubjectStateChange. In this CL,
> > VertexArray::onSubjectStateChange is embedded into
> > VertexArray::onBufferChanged(). DIRTY_BIT_ELEMENT_ARRAY_BUFFER and
> > DIRTY_BIT_ELEMENT_ARRAY_BUFFER_DATA is re-arranged so that we can map
> > bufferBindingMask directly to VertexArray::mDirtyBits. This especially
> > useful when one buffer is bound to multiple indices in the VertexArray.
> >
> > This CL also removes angle::ObserverInterface from VertexArray, since it
> > no longer observes anything.
> >
> > ASSERT is added in gl::Buffer::mContentsObservers to ensure it only
> > contains BufferTexture, since vertexArray is no longer using the
> > subject/observer.
> >
> > Bug: angleproject:400711938
> > Change-Id: Ie6e7159d7a89f0da5e1b7ca0a9dbe60a1e6c682f
> > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6569638
> > Reviewed-by: Geoff Lang <geofflang@chromium.org>
> > Commit-Queue: Charlie Lao <cclao@google.com>
> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
>
> Bug: angleproject:400711938
> Change-Id: I3b8e77db7b3d06b9ed875bfe7787904ac753da11
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6664161
> Commit-Queue: Charlie Lao <cclao@google.com>
> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Bug: angleproject:400711938
Change-Id: If7989b26701dcccbb8e49c42d388c0217e2d0b7f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6663536
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
2ac49bb6
|
2025-07-01T12:11:12
|
|
Reland "Vulkan: Move VertexArray::ElementBuffer away from observer"
This reverts commit 79ac1a8cd767a32cce6401203e20c4bd4ca4d539.
Reason for revert: the regression bug is fixed in PS6
The regression bug with the original CL is caused by when we bind a
vertex array without element buffer rebind, we missed to reset
mIndexRangeInlineCache. The other bug is that VertexArray::mDiryBits is
64 bit but VertexArrayBufferBindingMask is 16 bit, in
VertexArray::setDependentDirtyBits(), bufferBindingMask.to_ulong() <<
DIRTY_BIT_BUFFER_DATA_0 is only producing the 32 bit value on windows
platform due to unsigned long is 32 bit value. bits() is used and bit
shift is operated on to uint64_t here to avoid dropping high bits on
windows.
Two tests are added that reproduce the regression bug caused by
the original CL.
Bug: angleproject:400711938
Original change's description:
> Revert "Vulkan: Move VertexArray::ElementBuffer away from observer"
>
> This reverts commit 3f012a43ee2c101543785720eedfeaa80708479d.
>
> Reason for revert: https://issues.chromium.org/427064102
>
> Bug: angleproject:400711938
> Original change's description:
> > Vulkan: Move VertexArray::ElementBuffer away from observer
> >
> > Right now, VertexArray's element buffer is always observing buffer's
> > change. In previous CLs, we have moved vertex array away from
> > subject/observer usage. This CL moves element buffer away from
> > subject/observer as well. Since the gl::Buffer tracks buffer's binding
> > to each context's current vertex array's binding point,
> > kElementArrayBufferIndex is added to VertexArrayBufferBindingMask bits
> > so that the element buffer is tracked exactly the same as other vertex
> > array buffer bindings. The VerextArray code has been modified to handle
> > this special bit, since element buffer has its own binding point
> > VertexArrayState::mElementArrayBuffer as opposed to
> > VertexArrayState::mVertexBindings. After this CL, VertexArray object
> > should be completely off subject/observer usages.
> >
> > Bug: angleproject:400711938
> > Change-Id: I662ddfabc95034bdc7734939c944ab033f41801c
> > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6552160
> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> > Reviewed-by: Geoff Lang <geofflang@chromium.org>
> > Commit-Queue: Charlie Lao <cclao@google.com>
>
> Bug: angleproject:400711938
> Change-Id: I9487ba8b108baaeda1c8a27189dba64f77616774
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6663539
> Commit-Queue: Charlie Lao <cclao@google.com>
> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Bug: angleproject:400711938
Change-Id: I3f47ad1238c41f12b5cbd7a59b84be3fce1e9562
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6664004
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
154e5711
|
2025-06-24T15:28:28
|
|
Refine validation for GetQueryObjectuiv
Spec says that after a graphics reset has occurred on a context,
subsequent GL commands on that context (or any context which shares
with that context) will generate a CONTEXT_LOST error.
Exceptions to this behavior include:
Any commands which might cause a polling application to block
indefinitely will generate a CONTEXT_LOST error, but will also return
a value indicating completion to the application. Such commands
include:
- GetSynciv with pname SYNC_STATUS ignores the other parameters and
returns SIGNALED in values
- GetQueryObjectuiv with pname QUERY_RESULT_AVAILABLE ignores the
other parameters and returns TRUE in params
Bug: angleproject:427242336
Change-Id: I86fd6f93a2c2a4b60c6a1e19637ee6382fadac7b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6666083
Auto-Submit: Shufen Ma <Shufen.Ma@arm.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
bb3f79dc
|
2025-06-26T16:59:48
|
|
Reorder shader resource dirty bits
Process storage and atomic buffer dirty bits before uniform dirty bits.
This helps the vulkan backend avoid duplicate work when multiple shader
resources are dirty
Bug: angleproject:426412564
Change-Id: Ibab3da44ee32d22078df851bfed4967d1c2a605e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6680035
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
3c8b492e
|
2025-06-26T09:39:29
|
|
Add histogram for DirectX device removal
Bug: dawn:423964507
Change-Id: I22d40ede209797e759f4b4f9e4b86785df33dbe5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6665860
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
d28c6adf
|
2025-06-19T09:41:26
|
|
Modernize for macOS 12
macOS 12 is the minimum OS requirement, so remove the "main port"
workaround and do other modernization.
Bug: b/40250210
Change-Id: I9638014732f0589fc6171c0fe617b3c563f00c28
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6655558
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
56e9bfff
|
2025-06-19T00:00:00
|
|
GL: Remove obsolete macOS workarounds
Bug: angleproject:427600175
Change-Id: I8bfc062b71f1a34de09cbf76b504293ccd081fe0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6676022
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
dcc715ee
|
2025-06-19T15:35:53
|
|
Enable EGL_PLATFORM_GBM_KHR platform with device selection
FunctionsEGL.cpp:
- Allow EGL_PLATFORM_GBM_KHR platform and explicit device selection.
- Skip getPreferredDisplay if an explicit device is specified.
Display.cpp:
- Use DisplayEGL impl with EGL_PLATFORM_GBM_KHR.
- Wayland can use GBM platform, and OPENGLES.
angle.gni:
- Rename ozone_platform_gbm to ozone_platform_drm since its deprecated.
Bug: angleproject:425569857, b/396434686
Change-Id: I9493118f9dc95f78ebe46277bb4fcfeb7a29d465
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6663699
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Kramer Ge <fangzhoug@chromium.org>
|
|
d5babf99
|
2025-06-23T12:46:51
|
|
Vulkan: Fix unhandled deferred clears after glGetMultisamplefv
Issue was introduced in the commit that implemented deferred clears.
The `glGetMultisamplefv()` synchronizes draw framebuffer which defers
possibly staged clears. Since API is not handling deferred clears they
are left untouched, causing the ASSERT.
This change fixes the issue by not deferring clears for the
`glGetMultisamplefv()` command during flushing staged updates of dirty
framebuffer attachments.
Changes:
- Add `gl::Command::GetMultisample` enumeration for clarity.
- Add `gl::CommandBlitBuffer::CommandBlitBufferDepthStencil` enumeration
to improve code readability.
- Add `command` parameter into `gl::State::syncDirtyObject()` method to
use actual command enum instead of `Other`.
- Remove `previousDeferredClears` local variable and update ASSERT in
the `FramebufferVk::syncState()` method. New assert ensures empty
`mDeferredClears` instead of just checking dirty attachments, since
it is easy to make all attachments dirty making old and new assertions
act the same.
- Replace logic in `FramebufferVk::syncState()` that decides whether
need to defer attachments or not with switch-case. This makes the
logic more clear regarding handling individual commands and simplify
updating this handling in the future. Except of the bug fix with
`GetMultisample` command, handling of other command is uncached.
- Remove `flushDeferredClears()` from `FramebufferVk::readPixels()`
because `mDeferredClears` are not expected (now it's more clear after
the refactoring). And even if there are `mDeferredClears` (in case of
a bug or after API failure), `flushDeferredClears()` only flushes
clears for the draw framebuffer, while checking `mDeferredClears` of
the read framebuffer. This is a problem in case if read and draw
framebuffers are not the same.
Bug: angleproject:40644727
Test: angle_end2end_tests --gtest_filter=TextureMultisampleTest.GetMultisamplefvAfterClear/*
Test: angle_end2end_tests --gtest_filter=EGLSurfaceTest.GetMultisamplefvAfterClear/*
Change-Id: I376a62de52de5e17dbc63cc7ddb0506741a69266
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6661958
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
b3ec3a5f
|
2025-06-23T14:51:13
|
|
Track active uniform and storage buffer blocks
Track active uniform and storage buffer block indices
so we can process updates to only active buffer blocks
Bug: angleproject:426412564
Change-Id: I54fa6fbe795073887646d672303d231ed4317b65
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6663825
Commit-Queue: mohan maiya <m.maiya@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
beae1b4a
|
2025-06-19T00:00:00
|
|
Metal: Remove obsolete workarounds
Removed Intel-specific Metal workarounds
that are not used on macOS 12 and later.
Removed a redundant version check.
Bug: angleproject:427600175
Change-Id: I34c7e53108f7e030512c9436ab2b9ae38ad17946
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6672312
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
79ac1a8c
|
2025-06-23T11:11:10
|
|
Revert "Vulkan: Move VertexArray::ElementBuffer away from observer"
This reverts commit 3f012a43ee2c101543785720eedfeaa80708479d.
Reason for revert: https://issues.chromium.org/427064102
Bug: angleproject:400711938
Original change's description:
> Vulkan: Move VertexArray::ElementBuffer away from observer
>
> Right now, VertexArray's element buffer is always observing buffer's
> change. In previous CLs, we have moved vertex array away from
> subject/observer usage. This CL moves element buffer away from
> subject/observer as well. Since the gl::Buffer tracks buffer's binding
> to each context's current vertex array's binding point,
> kElementArrayBufferIndex is added to VertexArrayBufferBindingMask bits
> so that the element buffer is tracked exactly the same as other vertex
> array buffer bindings. The VerextArray code has been modified to handle
> this special bit, since element buffer has its own binding point
> VertexArrayState::mElementArrayBuffer as opposed to
> VertexArrayState::mVertexBindings. After this CL, VertexArray object
> should be completely off subject/observer usages.
>
> Bug: angleproject:400711938
> Change-Id: I662ddfabc95034bdc7734939c944ab033f41801c
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6552160
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Charlie Lao <cclao@google.com>
Bug: angleproject:400711938
Change-Id: I9487ba8b108baaeda1c8a27189dba64f77616774
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6663539
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
5df85793
|
2025-06-23T11:08:49
|
|
Revert "Vulkan: Avoid some loops in VertexArray::onBufferChanged"
This reverts commit 8d6d127acc1072488e5b57ba4e7e93da2d94bfda.
Reason for revert: https://issues.chromium.org/427064102
Bug: angleproject:400711938
Original change's description:
> Vulkan: Avoid some loops in VertexArray::onBufferChanged
>
> Before this CL, VertexArray::onBufferChanged() loops over
> bufferBindingMask bits and calls onSubjectStateChange. In this CL,
> VertexArray::onSubjectStateChange is embedded into
> VertexArray::onBufferChanged(). DIRTY_BIT_ELEMENT_ARRAY_BUFFER and
> DIRTY_BIT_ELEMENT_ARRAY_BUFFER_DATA is re-arranged so that we can map
> bufferBindingMask directly to VertexArray::mDirtyBits. This especially
> useful when one buffer is bound to multiple indices in the VertexArray.
>
> This CL also removes angle::ObserverInterface from VertexArray, since it
> no longer observes anything.
>
> ASSERT is added in gl::Buffer::mContentsObservers to ensure it only
> contains BufferTexture, since vertexArray is no longer using the
> subject/observer.
>
> Bug: angleproject:400711938
> Change-Id: Ie6e7159d7a89f0da5e1b7ca0a9dbe60a1e6c682f
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6569638
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Charlie Lao <cclao@google.com>
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Bug: angleproject:400711938
Change-Id: I3b8e77db7b3d06b9ed875bfe7787904ac753da11
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6664161
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
2fd033d0
|
2025-05-22T04:21:11
|
|
Vulkan: Optimize updates to uniform buffers
... when only the offset is modified. Most of the work done when
handling dirty uniforms can be skipped since the buffer bindings
haven't changed
Bug: angleproject:386749841
Tests: UniformBufferTest31.UniformBufferBindingRangeChange*Vulkan
Change-Id: Ic811bd71f0f2993f88ce9bcf93f9e8e46dfc6d99
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6581359
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
5220e634
|
2025-06-16T11:14:22
|
|
Fix glCopyImageSubData validation check part 2
For compressed texture, we also need to check if the copy subregion
starting points (offset) are aligned with the compressed block.
This change also moves *FillsEntireMip check to the
ValidateCompressedRegion() function, as it is easier to do a
per-dimension check.
Bug: b/419048313
Bug: angleproject:42264179
Bug: angleproject:42265887
Change-Id: I0f415e575bbc77bdf5178e2b5fc1260c43e7de4b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6648198
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
6bb47e67
|
2025-06-17T13:42:47
|
|
Vulkan: Limit finalizing foreign image layouts
Currently, any submission results in finalizing all foreign images.
However, if the submission is only limited to the outside render pass
command buffer, this would result in oldLayout VVL errors (01197), as
it would be too early to finalize the layout of such images at those
times. At this time, this type of submission can occur if the size of
buffer-to-image updates exceeds the following threshold:
kMaxBufferToImageCopySize
In this change, finalizing the foreign image layouts would only occur
when all commands are being submitted.
* In ContextVk::submitCommands(), finalizeAllForeignImages() is now
called only when the submission type is Submit::AllCommands.
* Added new submit tests for foreign images to ImageTest:
* UploadForeignUntilSubmitDoesNotBreakRenderPass
* CopyToForeignUntilSubmitDoesNotBreakRenderPass
Bug: b/425987310
Change-Id: Ia345e176be79017ba18ef52a57256eeeb298e39a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6653602
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
5d124404
|
2025-06-17T17:04:12
|
|
WebGPU: Fix bind groups leaking in CommandBuffer.
Wrap all per-submission member variables in a struct so that we can
reset everything at once using the default constructor. This avoids
similar leaks in the future.
Bug: chromium:413078308
Change-Id: I3f926c82905b73b27d6b751cfe2878a41ced916a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6652290
Reviewed-by: Matthew Denton <mpdenton@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
41144603
|
2025-06-06T10:56:03
|
|
WebGPU: Handle Dawn breaking change in CreateInstance
Needed in order to update Dawn to match the standard webgpu.h, here:
https://dawn-review.googlesource.com/c/dawn/+/245242
Bug: chromium:414868137
Change-Id: I2bdf5bd5747a8da8ed0612a99d70eee8a3d09ecb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6652516
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Kai Ninomiya <kainino@chromium.org>
|
|
59281334
|
2025-05-22T17:13:22
|
|
Vulkan: Reduce kMaxEmptySlots for SharedDescriptorSetCacheKey
There is report that addKey is still showing up in simpleperf. This CL
breaks addKeyImpl into three functions so that SharedFramebufferCacheKey
will still have the same behavior. SharedDescriptorSetCacheKey is
changed to track 64 cache key at maximum, and updateEmptySlotBits() is
never called in SharedDescriptorSetCacheKey. This means the shared cache
key tracking is further limited to usage case where a buffer/texture is
only involved in less than 64 descriptorSets. Otherwise we will not
track the remaining DescriptorSets, which means if this buffer is
released, the corresponding descriptorSet will not immediately
destroyed, and we will rely on cache eviction code to take care of DS
growing problem.
Bug: b/384839847
Change-Id: I99abd17966446377babace6d06cc8f380a71c084
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6581492
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
dea162cc
|
2025-06-09T15:43:05
|
|
WebGPU: Finalize command blocks when starting a new one
The command buffer abstraction would not finalize blocks of commands
when creating a new block, leading to possible infinite loops when
processing the commands.
Bug: chromium:413078308
Change-Id: Idf4e95a5ccc71f3ddc9a4202e5e000c0e2cd5f87
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6629473
Reviewed-by: Liza Burakova <liza@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
9d70781f
|
2025-06-17T07:06:37
|
|
Vulkan: Bugfix in TextureVk::initImage(...)
Account for compute based mipmap generation during initImage
Bug: angleproject:405840226
Tests: ImageTestES3.SourceAHBTargetTexture2DGenerateMipmap*
Change-Id: Ic2f6c4576ec8ff464a5d60c4a49aeb87be3a5785
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6650712
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: mohan maiya <m.maiya@samsung.com>
|
|
9e000857
|
2025-02-04T16:12:47
|
|
Vulkan: Utilize VkBufferUsageFlags2 for bufferview
* Added the following struct to bufferview createInfo in case of
VK_KHR_maintenance5 support: VkBufferUsageFlags2CreateInfoKHR
* Limited VVL 08779 to platforms without KHR_maintenance5 support.
Bug: angleproject:394353300
Change-Id: I46beac693cda3216afc497c8ed74cbf51b72e549
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6231512
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
243ebfa7
|
2025-06-16T16:07:06
|
|
WebGPU: Allow glReadPixels from non-base mip levels.
Before, the WebGPU backend always read from the base level
of the texture attached to the current framebuffer.
Bug: angleproject:42267090
Change-Id: Ibe5b8575f6fa90c1942ba566485b6175ee10f808
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6634558
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Auto-Submit: Matthew Denton <mpdenton@chromium.org>
|
|
dfefcbc6
|
2025-06-09T16:30:55
|
|
glGetProgramiv should return the properties in effect
glProgramParameteri can set values to
GL_PROGRAM_BINARY_RETRIEVABLE_HINT. However, this setting will not be in
effect until the next time glLinkProgram or glProgramBinary has been
called successfully. Also, glGetProgramiv returns the properties
currently in effect for program. Therefore, we need to add a variable to
record the ineffective value and copy it at the stage of glLinkProgram
or glProgramBinary.
Bug: angleproject:421219220
Change-Id: Ib564e6df03d34f3fc7389f926795cb3e64cbf687
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6606372
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Aurora Zhang <Aurora.Zhang@arm.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
94ee620d
|
2025-05-22T10:07:05
|
|
Metal: Allow optimization of simple loops
Reimplement the feature to avoid undefined behavior of infinite loops.
Add EnsureLoopForwardProgress rewrite pass that inserts a volatile
variable access to all loops that it cannot analyze as being finite.
Detect loops of form `for (; i <op> x; ++i)` as being finite.
The <op> can be any of <,<=,>,>=,==, != operator.
The i can be int or uint.
The ++i can be -- or ++, -=1, +=1.
This assumes that backends using the feature emit signed int arithmetic
with defined wraparound semantics.
Uses volatile write instead of asm("") due to asm not forcing the
behavior in some compiler versions. The volatile variable access is
defined in C++ as forward progress, and by inheritance this works in
MSL.
Later commits may remove injectAsmStatementIntoLoopBodies if
ensureLoopForwardProgress is appropriate for all use-cases.
Bug: angleproject:418918522
Change-Id: Ic9c29f57044b792195386483208632354d24c854
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6575051
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
|