src


Log

Author Commit Date CI Message
Raja  Wasim Husain 6c160cad 2025-08-04T12:32:36 CL/Vulkan: cl_khr_external_memory extension (pt.1) - Make this extension visible if Vulkan implementation support features supportsExternalMemoryFd and/or supportsExternalMemoryDmaBuf - Implemented APIs clEnqueueAcquireExternalMemObjectsKHR and clEnqueueReleaseExternalMemObjectsKHR - Updated clCreateBufferWithProperties to handle external memory file descriptor. Bug: angleproject:378017028 Change-Id: Idff08808bc0227b5f98b84c2086b68541665146d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6785087 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
Mark Lobodzinski 995c4c4d 2025-08-20T12:14:47 Capture/Replay: Target GLES3.1 to avoid SSO limitations Retracing with get_min_reqs can produce results which limit trace portability. Modify retrace script to detect when GL_EXT_separate_shader_objects is required, and then to increase min_version to 3.1 where this ext was moved to core and remove the ext from the required list. Test: angle_trace_tests --gtest_filter=*onmyoji --use-gl=native Bug: b/440102792 Change-Id: I36258fd7b9b5c5aa3e87ad9908849ef2a900e898 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6866639 Auto-Submit: Mark Łobodziński <mark@lunarg.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Liza Burakova 03068e0c 2025-08-20T17:36:22 [WebGPU] Implement direct copy for images. This CL implements CopyImage specifically in cases where the source is the same size and format as the destination. Bug: angleproject:438268609 Change-Id: Icf5f3685bb2f49874d996883c839515314f1c189 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6842317 Commit-Queue: Liza Burakova <liza@chromium.org> Reviewed-by: Matthew Denton <mpdenton@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tim Van Patten 5d9d9b9b 2025-08-19T17:12:03 test: Use eglGetPlatformDisplay() From the EGL 1.5 spec: Appendix F Version 1.5 EGL version 1.5 was voted out of the Khronos Technical Working Group on January 31, 2014, and formally approved by the Khronos Board of Promoters on March 14, 2014. EGL 1.5 is the sixth release of EGL. It introduces the following new features (the EGL extension(s) each feature is based on are also shown parenthetically): * Platform support: – Providing a mechanism for support of multiple platforms (such as window systems or offscreen rendering frameworks) in a single EGL implementation at runtime (EGL_EXT_platform_base). Until https://crrev.com/c/6552257, many tests used eglGetPlatformDisplayEXT() which is provided by the EGL extension EGL_EXT_platform_base. With the promotion of the EGL_EXT_platform_base functions to core EGL in version 1.5 and ANGLE supporting EGL 1.5 (as of at least 2019), the calls were updated to use eglGetPlatformDisplay(). Unfortunately, EGLContextPassthroughShadersTest was missed. Bug: b/409384875 Test: angle_end2end_tests Change-Id: I5c620bce98c8e76113588f4c94b77d95a5223171 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6862841 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Raja Wasim Husain 6ff016fb 2025-03-31T09:52:14 CL/Vulkan: Update caps for image1d_buffer max size Updated max number of pixels for a 1D image created from a buffer object to come from VK implementation. Bug: angleproject:406022415 Change-Id: I56e9821895245c3a3655ca0c4afbe49ed89baded Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6386422 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
Sungyong Choi da5a5628 2025-08-11T10:53:06 bitset_utils: Fix GCC shift-count-overflow warning GCC triggers a -Werror=shift-count-overflow when kDefaultBitSetSize is 64, due to the constructor compiling a branch with `value >>= 64`. Although this path is never executed at runtime, GCC still inspects the code and emits the warning as an error. Refactored the constructor to: - Move common reset() into a single place - Split initialization into initFromValue<S>() overloads enabled only for S < 64 or S >= 64 via std::enable_if_t - Avoid generating any shift code when S >= 64 This change ensures GCC does not instantiate invalid shift operations and keeps the initialization logic cleaner. BUG: angleproject:438226513 Change-Id: I1ed0b42540f1bfce469d5738757045bc6d92ac61 Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845475 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Sungyong Choi 68baeeeb 2025-08-12T15:51:07 State: avoid GCC -Waddress by using constexpr null-check helper GCC with -Waddress warns that the static_assert comparing `handlers[0] != nullptr` is always true when MakeDirtyObjectHandlers() fully initializes the array. During constant evaluation, handlers[0] is replaced with the specific member function address (&State::syncActiveTextures), which can never be null, making the comparison tautological. This change replaces the direct `handlers[0] != nullptr` check with a constexpr helper that iterates over all handlers and verifies none are null. By comparing each element in a loop, the check still runs at compile time (constexpr), but avoids a direct “function address vs nullptr” pattern that triggers -Waddress. BUG: angleproject:438226513 Change-Id: Iaa8441000f8b2aa28c44d17730ca223fd4d4595b Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845477 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Sungyong Choi 39265327 2025-08-13T08:05:24 Fix BindDescriptorSetParams bit-field size and -Wpadded warning Replace pipelineBindPoint : 8 with full VkPipelineBindPoint to hold all enum values. Reorder members and adjust bit-field widths to pack within 32-bit units, adding explicit padding to eliminate compiler-inserted padding and silence -Wpadded. BUG: angleproject:438226513 Change-Id: I8950fcb10d5796bd8485791f63980a2905179324 Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845479 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alex Dean 9bd6785d 2025-08-12T15:19:08 Revert "Tests: Skip CapturedTestCL to unblock vulkan-deps roll" This reverts commit 2a5ad67c883a28436d7399d73a2ccdb9ef53c641. Additionally, this modifies CapturedTestCL.cpp so there is no failure coming from the vulkan-deps roll. Bug: angleproject:438220619 Bug: angleproject:438195622 Change-Id: I6cf2d11d7ff77ce4513948b22b8c59d970c7810b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6842222 Reviewed-by: Austin Annestrand <a.annestrand@samsung.com> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Sungyong Choi 1622d4ad 2025-08-13T07:22:13 Fix -Wparentheses in unlockAndRelease Add parentheses around (valid && owns_lock()) to clarify the intended grouping and silence GCC -Wparentheses warning. BUG: angleproject:438226513 Change-Id: I0d4f3e0153c277c96ec85f255f844bab085f9550 Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845478 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Sungyong Choi 119ffd44 2025-08-13T16:07:52 Fix -Wreturn-type in ShadowSamplerFunctionsTest::FunctionName Add UNREACHABLE() and a fallback return to ensure the non-void function always returns when switch does not cover all enum values. BUG: angleproject:438226513 Change-Id: I3904dd59b323b90930d9251b060ab7067ff412c7 Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845486 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Sungyong Choi 3474d4f3 2025-08-13T08:13:31 Guard overlayVk->onPresent call in drawOverlay GCC warns "'this' pointer is null" (-Wnonnull) when overlayVk could be null at the call site. Wrap the call with an explicit null check to avoid dereferencing a null overlay and silence the warning. BUG: angleproject:438226513 Change-Id: I3c719d703277c0a888eac9fb9edaaac77cf76a85 Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845481 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Sungyong Choi a06cb368 2025-08-12T11:45:43 Fix GCC -Wdangling-pointer warning in NodeStackGuard The previous implementation stored the address of a local member (oldNodeStack) into ConsList::tail, which triggers the warning even though the lifetime is safe within the guard's scope. This change allocates a copy of the previous nodeStack on the heap using std::make_unique, and stores that pointer in tail. This ensures the referenced ConsList object has a lifetime tied to the guard object itself and is not considered a dangling pointer by GCC's static analysis. BUG: angleproject:438226513 Change-Id: Ifea04515db7b1988dff6ec41c60799158b753128 Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845476 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Sungyong Choi 2b8f216c 2025-08-13T08:44:34 Fix GCC -Wdeprecated-copy warning in ImageLoadContext Add an explicit copy assignment operator to ImageLoadContext to replace the implicitly-declared, deprecated version. This makes the intended assignment behavior explicit and silences the GCC warning when assigning a default-initialized value. BUG: angleproject:438226513 Change-Id: I44d9b8bf12c5e3172d30ce5413460d881e61449b Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845482 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Sungyong Choi 7febacfe 2025-08-13T08:10:11 Remove unused compressionProp in TextureVk::initImage compressionProp was declared and sType initialized but never used, triggering -Werror=unused-but-set-variable with GCC. The query path uses compressionInfoVar instead, so drop the dead variable and its initialization. BUG: angleproject:438226513 Change-Id: Ib81f418a570b1a7fd858eec4cee4250db49cdd08 Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845480 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Sungyong Choi 6b03372e 2025-08-13T08:58:35 Fix GCC -Wconversion-null error in WriteParamValueReplay Replace insertion of NULL with the string literal "NULL" to prevent GCC -Wconversion-null. BUG: angleproject:438226513 Change-Id: I7048bc43f282d94e72a5e090176c805d2baa5b06 Signed-off-by: Sungyong Choi <sywow.choi@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845483 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Gowtham Tammana 4c834956 2025-04-09T20:30:43 CL/Vulkan: Add fp16/64 to extension list if supported The checks for fp16 and fp64 support are already setup on the vulkan backend and clspv side. Add them to the reported extension list. Also added "-d" flag to bruteforce smoke to toggle off 64-bit precision testing (i.e. just test single precision in smoke for now) Bug: angleproject:433980941 Change-Id: Icbbde7500cf43e5c0a256411f001252bfec5ad24 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6785092 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
Yuxin Hu 806c80ec 2025-08-14T13:41:58 Add a new ShaderVariable struct property Add a new ShaderVariable struct property isTransformedFP16FloatUniform. This property will be set by compiler when the corresponding shader variable data type in shader code is transformed from 32 bit to 16 bit. The property value be later passed to LinkedUniform so that the frontend knows if it should transform the data from 32 bit to 16 bit before writing to memory, and if it should transform the data from 16 bit to 32 bit after reading from memory. This change is no op. Bug: angleproject:405795981 Change-Id: Iaae15baa8ab9f7c3295071fa1e1ab04752bd69bb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6852396 Auto-Submit: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Panfeng Hou 25f5e2cf 2025-08-13T17:03:19 Vulkan: Add support for built-in gl_PrimitiveShadingRateEXT Add support for built-in gl_PrimitiveShadingRateEXT and relative const value. Bug: angleproject:397255625 Change-Id: I25d51f5805697e137b232175ee790808c45850b7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6845515 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mark Lobodzinski 240f6af8 2025-08-12T14:32:40 Capture/Replay: Pick up API SSBO binding changes GenerateLinkedProgram pulled uniform block bindings from inShaderBindings, but for trace this does not pick up API-side changes to the bindings with glUniformBlockBinding calls for example, resulting in missing geometry in some games. Test: angle_trace_tests --gtest_filter=*onmyoji Bug: b/438231427 Change-Id: I1b95c004c4fd856dc8b3a91cdef3e9251a275ca6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6842217 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Yuxin Hu 1d8279a2 2025-08-13T13:35:02 Do not sort ANGLE internal uniforms or built-in uniforms On Mac, for webGL app on chrome, if the uniforms added by ANGLE are not placed at the top of the ANGLE_UserUniforms struct, the user defined uniforms in the same ANGLE_UserUniforms struct seem to be messed up and not read correctly by shader code. This change fixes it by moving the sortUniforms() function call to the place before we add ANGLE internal uniforms. That way ANGLE internal uniforms will be inserted later and stay on top of ANGLE_UserUniforms struct. Bug: chromium:437678149 Change-Id: I34a0d3dcb98c5fe30ad248381ecb5f7f78252275 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6847281 Auto-Submit: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Yuxin Hu 9034e29b 2025-08-14T13:25:39 Vulkan: add a feature flag controlling float uniforms 16-bit transform Add a feature flag that will guard whether we want to transform mediump / lowp float uniforms from 32-bit to 16-bit in SpirV. The feature flag is enabled when VK_KHR_16bit_storage extension is supported, and uniformAndStorageBuffer16BitAccess vulkan feature is supported. The feature flag is initialized to false in this change. It will be turned on in a later change when it is being used. Bug: angleproject:405795981 Change-Id: I37c77270fbd391cc97f58890065b66faf77766c1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6852395 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Matthew Denton 63d8f74c 2025-08-12T19:39:03 WGSL: move DeclareDefaultUniforms() out of SPIR-V WGSL needs the same thing (default uniforms gathered into an interface block). Changes 3 things in the file move: 1. Now capable of adding a named interface block (Vulkan's is nameless) to hold the default uniforms. 2. Removes inactive uniforms 3. Deals with the case where there are no active default uniforms, by not declaring an interface block at all. Bug: angleproject:376553328 Change-Id: Ia25318b4db93068010c3c44414cd00803b783799 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6843929 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Hareesh Karada 7ad67712 2025-08-13T16:33:03 CL/Vulkan: Enable cl_khr_integer_dot_product extension - Enabled extension string and corresponding opencl_c features - Updated packed_cl_enums.json with three new enums - Enabled support for this extension in function clGetDeviceInfo - Add support for CL_DEVICE_OPENCL_C_FEATURES API query through clGetDeviceInfo corresponding integer_dot_product extension - Updated vk_features.json with new ANGLE Feature supports_shader_integer_dot_product - The changes in autogen files are generated by running the run_code_generation.py script Tests-Passing: ocl_cts: test_integer_ops integer_dot_product ocl_cts: test_compiler features_macro VK-GL-CTS:dEQP-VK.spirv_assembly.instruction.compute.opsdotkhr.* dEQP-VK.spirv_assembly.instruction.compute.opudotkhr.* dEQP-VK.spirv_assembly.instruction.compute.opsudotkhr.* dEQP-VK.spirv_assembly.instruction.compute.opsdotaccsatkhr.* dEQP-VK.spirv_assembly.instruction.compute.opudotaccsatkhr.* dEQP-VK.spirv_assembly.instruction.compute.opsudotaccsatkhr.* Bug: angleproject:433980939 Change-Id: Iae7a7753d0556beeb85c254c61a37a0d047df058 Signed-off-by: Hareesh Karada <hareesh.k@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6785089 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Cody Northrop 2eef3701 2025-08-11T20:25:42 FrameCapture: Handle null texture in MEC When interating through a UnsafeResourceMapIter, we need to check for null entries before dereferencing. Test: Fortnite MEC Bug: b/180418810 Change-Id: I0dc234234f9bb219026b2b67febb32e8af19e8b1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6839286 Reviewed-by: Xiang Wang <xwxw@google.com> Auto-Submit: Cody Northrop <cnorthrop@google.com> Commit-Queue: Xiang Wang <xwxw@google.com>
Yuxin Hu edb05627 2025-08-12T12:17:36 Fix sort uniform bug Current sort doesn't take care of the case when both uniforms are struct specfiers. Given that struct types are easily broken by sort, make the sort not reordering uniforms if both are structs. Bug: b/437825940 Change-Id: Idda1810ac4234f7e1547735e4e09658ab0a57eed Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6842936 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Tim Van Patten 899f3505 2025-08-07T09:59:19 TestSuite: Android: Call onCrashOrTimeout() on test crash Currently, when a test crashes on Android we don't get any results for tests that ran or for the crashing test itself. This makes it difficult for developers to debug the issue, since they don't know which test crashed. Add signal handlers which call onCrashOrTimeout() when a test crashes. Typically, crashes occur within the individual tests rather than in the test runner (TestSuite), so it should be "safe" to attempt to dump the results up to and including the crash to aid with debugging. This is still risky since things are in a bad state, but we expect (essentially) all crashes to be in the individual tests, ANGLE, or the underlying driver code, rather than in the TestSuite instance, so writing the results JSON file should have a good chance of succeeding. Worst case, we just crash again and get nothing (like we have before this change). Bug: b/279980674 Change-Id: Ifd5f3b97d5af731586e7bbf765bb60b3cb4f503b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6827986 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Solti Ho <solti@google.com>
Charlie Lao 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>
Junhua Chen ef4bc113 2025-08-07T14:20:08 Add DIR_METADATA to specific buganizer_public component_id Currently LUCI Analysis file bugs for angle test flaky issue under the top level Chromium component, example: http://crbug.com/401993176 These bugs should filed directly under the Public Trackers > ANGLE, to avoid engineers updating the component manually. Bug: b/437142709 Change-Id: Ie8fa4f02fea10c49cb94d736f674f655fe9f791b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6829151 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Xiang Wang 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>
Matthew Denton 7e28089b 2025-07-31T18:44:01 WGSL: support bvecs in uniforms WGSL does not allow booleans in the uniform address space. The last CL uses u32s to represent bools in the uniform address space, and this CL uses vecN<u32> to represent bvecN. Bug: angleproject:376553328 Change-Id: Ibf9f1fbf230ca03dd3d4661ba599e5fb1cb26ac4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6808955 Reviewed-by: Liza Burakova <liza@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Austin Annestrand f92d6f4b 2025-04-07T17:42:46 CL: Route API trace to logcat for Android For better logging when running Android APKs Bug: angleproject:433980940 Change-Id: Ib924262a92728d0a9711a5b98f051634341859d4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6785090 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shufen Ma 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>
Shahbaz Youssefi 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>
Cody Northrop 2a5ad67c 2025-08-12T10:23:10 Tests: Skip CapturedTestCL to unblock vulkan-deps roll Test: angle_end2end_tests --gtest_filter=CapturedTestCL.* Test: capture_tests.py Bug: angleproject:438195622 Change-Id: I9dd0f861ce4325c29305aa8de598f3434ec86ab3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6842935 Auto-Submit: Cody Northrop <cnorthrop@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi b2e2766c 2025-08-12T11:08:46 Translator: Reject bool < bool This is not allowed per the GLSL ES spec. Bug: chromium:437983671 Change-Id: I9bd46718a35917dcdf6382cd51253ca2b68d5636 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6842555 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Austin Annestrand 3643c21d 2025-08-11T15:02:18 Suppress oclcts NonUniform Workgroup failures pt.2 Suppress 2 other non-uniform workgroup smoke tests (as a stop-gap) until we root-cause the issue. Unblocks: https://chromium-review.googlesource.com/c/angle/angle/+/6831861/1 Bug: angleproject:42267085 Change-Id: I956d3706e160f38e33e5789e70abdc343fac8b54 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6838877 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 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>
Cody Northrop 9a23635c 2025-08-09T18:17:33 Tests: Add Frost and Flame trace Test: angle_trace_tests --gtest_filter="*frost_and_flame*" Bug: b/437598600 Change-Id: Icf8c5ce3e0e1f0cadc442aedc8b38a70efb1e3f7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6834277 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Mark Łobodziński <mark@lunarg.com>
Charlie Lao 5f5baf86 2025-08-08T10:22:07 Reduce WebGLCompatibilityTest::L32FTextures test time This test is looping formats. Within each loop it compile the same program which makes this test take very long to finish. This CL caches the programs so that it only compile/link once. This reduce this test run time on my local gLinux box from 1633 ms to 326 ms. Bug: angleproject:40096431 Change-Id: I32d7ad4fd25e1e4130766578fff21b1a2058c183 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6830119 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Cody Northrop 9367369d 2025-08-08T16:56:58 Tests: Add Kingshot trace Test: angle_trace_tests --gtest_filter="*kingshot*" Bug: b/437417676 Change-Id: I6c4a7a095266f6f99b0810854acbbfb50024d52f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6832638 Reviewed-by: Solti Ho <solti@google.com> Auto-Submit: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Matthew Denton ca3d732d 2025-07-24T16:22:31 WGSL: support bool in uniforms WGSL does not allow booleans in the uniform address space. This CL changes the translator to substitute u32 for bool in the uniform address space, and convert it to bool on use. Arrays of bools are obviously arrays of u32s, and those will need special conversion functions to convert the entire array<u32> to array<bool> if necessary. This also includes the optimization of an array<bool> in a uniform--when indexing into it, only the indexed element will be converted to a native bool, instead of converting the entire array and then indexing. Note that substituting u32 for bool matches std140, so this change requires no changes to layout of uniforms. Also note that WGSL really likes explicit casts, so there's not really a way to avoid inserting explicit casts everywhere when using u32. Bug: angleproject:376553328 Change-Id: I8f72e55c6b401c28ff622622df7a450b7032721f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6785609 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Matthew Denton <mpdenton@chromium.org> Reviewed-by: Liza Burakova <liza@chromium.org>
Charlie Lao 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>
Charlie Lao 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>
Cody Northrop 8796f68c 2025-08-07T14:25:19 Tests: Add Top Heroes: Kingdom Saga trace Test: angle_trace_tests --gtest_filter="*top_heroes_kingdom_saga" Bug: b/437162076 Change-Id: Ia690266b34f0da0c23fbd099ed28f20657529644 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6828593 Auto-Submit: Cody Northrop <cnorthrop@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Tingwei Guo 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>
Yuly Novikov b778f1ce 2025-08-07T15:31:01 Balance test shards to 10 minutes Shards increased due to googletest roll: angle_end2end_tests on Win ASAN: 10 -> 14 angle_deqp_gles3_tests on Linux ASAN and TSAN: 8 -> 11 Drive-by shards increase for slowness which was not investigated: angle_end2end_tests: on Linux Intel and Windows and Linux NVIDIA: 2 -> 3 on Win Intel experiment (UHD 770, 2 processes): 3 -> 5 on Win Intel (UHD 630, 1 process): 4 -> 10 angle_restricted_trace_gold_tests on Linux Intel and Windows and Linux NVIDIA: 1 -> 3 on Win Intel UHD 770: 1 -> 4 on Win Intel UHD 630: 1 -> 5 angle_trace_perf_vulkan_tests on Win Intel UHD 770: 2 -> 4 on Win Intel UHD 630: 2 -> 3 Skip EGLDisplayTest.ContextLeakAfterTerminate on Linux Intel, which started failing with the new sharding. Bug: angleproject:428697844, angleproject:437259106 Change-Id: I3ba458aa7b68bddf9786bb9fcbc2a3ed7479556c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6827389 Auto-Submit: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Charlie Lao 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>
Mark Lobodzinski 61ddca79 2025-08-07T11:16:29 Tests: Add Gossip Harbor ANGLE trace Test: angle_trace_tests --gtest_filter=*gossip_harbor Bug: b/437087719 Change-Id: Ia0d313b3e34074df8e24ad3eae63b4718ed2bfc7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6828000 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Charlie Lao 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>
Charlie Lao 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>
Charlie Lao 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>
Mark Lobodzinski 1943d505 2025-08-06T10:03:45 Tests: Add Seaside Escape ANGLE trace Test: angle_trace_tests --gtest_filter=*seaside_escape Bug: b/436801950 Change-Id: Iedc4b03317ef02585ccf86b54494f1938379a68a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6823580 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com> Auto-Submit: Mark Łobodziński <mark@lunarg.com>
Charlie Lao 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>
Shahbaz Youssefi 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>
Tim Van Patten 88de021d 2025-08-01T17:15:22 tests: Skip PbufferDifferentConfig on system EGL Skip the test EGLBackwardsCompatibleContextTest.PbufferDifferentConfig when testing the system EGL, because not all platforms expose ANGLE-specific extensions. Bug: b/409384875 Test: angle_end2end_tests \ --gtest_filter=EGLBackwardsCompatibleContextTest.PbufferDifferentConfig/ES2_Vulkan_NoFixture Change-Id: I1556d7981d1e6c8c6fc1803cafcb76fa1052dcef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6814161 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Tim Van Patten bc7e86b1 2025-07-30T14:55:34 tests: RequestedRendererCreated: Get created context version If the driver being tested does not support the ANGLE extension EGL_ANGLE_create_context_backwards_compatible, then the Context version returned may not match the requested version. Update the test RendererTest.RequestedRendererCreated to query the current Context's version if the extension is not supported so the renderer string is checked against the correct value. Continue enforcing the renderer string has the expected value if the extension is supported. Bug: b/409384875 Test: angle_end2end_tests --gtest_filter=RendererTest.RequestedRendererCreated/* Change-Id: Iad1b6d36a31b7d79e8fc5fae9e4cc9769b55edb8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6803326 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Tim Van Patten c2316adb 2025-08-05T10:43:09 Add support for ARM to expectations file Add support for skipping tests on ARM devices with the tag "ARM". Bug: b/279980674 Change-Id: If310955c5dfb2af19493f8af70f4f6c00c97fcc9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6821832 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 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>
Amirali Abdolrashidi 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>
Charlie Lao 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>
Amirali Abdolrashidi 5f42ce7e 2025-08-05T11:57:54 Enable KHR-GLESEXT tests on bots * Enabled several bots to run the khr_glesext tests. * Skipped some failing tests for Vulkan. Bug: b/436389014 Change-Id: If0c43f508eb04c21307f75c6dc62e3ef30b0556e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6821642 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Amirali Abdolrashidi 71b7b5ee 2025-08-04T18:44:35 Add KHR-GLESEXT test suite * Added rules to build new dEQP test binary to run KHR-GLESEXT tests: angle_deqp_khr_glesext_tests Bug: b/436389014 Change-Id: I53b74605d3c2a9a5f6a8fece17bc3f7656a6772c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6820701 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Cody Northrop f3b4b716 2025-08-05T14:28:04 TracePerfTest: Disable debug callbacks for GLES1 on Android We're seeing nullptr crashes when running GLES1 traces through the Android EGL loader with debug callbacks enabled. The callbacks are only enabled for Debug builds. Current theory is that the loader exposes the extension, but doesn't actually connect the call for GLES1 contexts. For now, expand the existing ARM skip to all Android devices. Test: restricted_trace_perf.py --renderer vulkan -f minetest Bug: b/352386141 Bug: b/436624755 Change-Id: I8ebe8f53c5efdecb2169ce017886753779ef5219 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6821913 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi 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>
Charlie Lao 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>
Amirali Abdolrashidi fc0e0397 2025-07-31T13:15:45 Translator: Fix location validation for inout Without this validation, a shader using an inout variable can write into a memory beyond the limit set by MaxDrawBuffers when shader framebuffer fetch is enabled. * Extended the location check in visitSymbol() to include InOut qualifiers (EvqFragmentInOut) as well (in ValidateOutputsTraverser). * Moved RewritePixelLocalStorage() after ValidateOutputs() to avoid issues related to locations not being specified in the InOut nodes from the PLS implementation. * Added a unit test to test that this case results in a compilation error: GLSLTest_ES3.CompileFSWithInoutLocBeyondMaxDrawBuffers Bug: chromium:435139154 Change-Id: I44c729377a2e1d3126c2d279172217b2ab92b57b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6806230 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 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>
Aurora Zhang 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>
Shahbaz Youssefi 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>
Charlie Lao 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>
Panfeng Hou 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>
Amirali Abdolrashidi 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>
Matthew Denton 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>
Tim Van Patten b0e0c9f6 2025-07-30T17:20:25 tests: DefineTexture2DArrayShouldFail skip on ES3+ The test Texture3DTestES2.DefineTexture2DArrayShouldFail is validating behavior specific to OpenGL ES 2.0. Skip the test when running on OpenGL ES 3+ contexts, which is possible when testing the system EGL which may not support the extension EGL_ANGLE_create_context_backwards_compatible. Bug: b/409384875 Test: angle_end2end_tests --gtest_filter=Texture3DTestES2.DefineTexture2DArrayShouldFail/* Change-Id: I129ce494c784c3889f21d4950a0302258b423b08 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6803336 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Igor Nazarov 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>
Shahbaz Youssefi 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>
Tim Van Patten aa533732 2025-07-28T15:56:13 CreateGeometryShaderInES3: Skip on ES3.1+ When testing the system EGL (angle_test_enable_system_egl = true), the context returned is the maximally conformant version, which can be OpenGL ES 3.2. The test GeometryShaderTestES3.CreateGeometryShaderInES3 verifies that geometry shaders cannot be created, assuming it will only ever be testing ES 3.0 contexts. 1. Add ANGLE_INSTANTIATE_TEST_ES3_AND_ES31_AND_ES32() to instantiate a test for ES 3.0, 3.1, and 3.2. 2. Update GeometryShaderTestES3.CreateGeometryShaderInES3 to skip when testing ES 3.1+ contexts. 3. Instantiate GeometryShaderTestES3 for ES 3.0, 3.1, and 3.2. Bug: b/409384875 Test: GeometryShaderTestES3 Change-Id: Ic5b4dbb167b8de7f24da285b4620f5257ed7df54 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6794766 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Eugene Zemtsov 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>
Tim Van Patten 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>
Amirali Abdolrashidi 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>
Mark Lobodzinski b61038bf 2025-07-28T21:55:11 Tests: Add ANGLE trace for Whiteout Survival Test: angle_trace_tests --gtest_filter=*whiteout_survival Bug: b/435147875 Change-Id: I09c429dca130321f2a7cd33abdb0521715637257 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6801131 Commit-Queue: Mark Łobodziński <mark@lunarg.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Igor Nazarov 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>
Solti e286ef78 2025-07-24T21:19:54 ANGLE: Add validation test for GL_RENDERER string format This change introduces a new ANGLE end-to-end test to validate the format of the GL_RENDERER string, preventing regressions caused by downstream modifications. A recent issue (b/318636997) was caused by a partner modifying the ANGLE GL_RENDERER string in a way that broke Skia's parser. This revealed that the string format is a de-facto API contract that must be enforced. This new test, RendererTest.ValidateCanonicalFormat, serves as an automated guardrail and will become part of the Android CTS. The test enforces the following structural contract: 1. The overall structure must be "ANGLE (Vendor, Renderer, Version)". 2. The separator between components must be ", ". 3. The Vendor, Renderer, and Version components must not be empty. This ensures the string is parsable by clients like Skia without over-constraining the content of the component strings, which may originate from underlying drivers. The test correctly skips validation on the Null backend, which is not subject to this contract. Test: autoninja -C out/Android angle_end2end_tests && out/Android/angle_end2end_tests --gtest_filter="RendererTest.*" --num-retries=0 Bug: b/432805963 Change-Id: I1202074cc9f4413ee88e4534fb72fb71101721e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6788522 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Solti Ho <solti@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 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>
Charlie Lao 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>
Mohan Maiya 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>
Charlie Lao 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>
Charlie Lao 09bbe914 2025-07-28T12:53:53 Add test for mapBuffer and disable/enable attrib interaction Added a test that mapBuffer while attribute is disabled, the draw call should succeed. If attribute is then enabled, the next draw call should fail with GL_INVALID_OPERATION error. Bug: b/433331119 Change-Id: I61d9ff16b0d485309c58c2fe2939c3de8b25864a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6792268 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Tingwei Guo 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>
Mark Lobodzinski 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>
Charlie Lao 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>
Mohan Maiya 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>
Cody Northrop 2b12571c 2025-07-27T20:07:50 Tests: Add Last War: Survival Game trace Test: angle_trace_tests --gtest_filter="*last_war_survival_game" Bug: b/434548051 Change-Id: I25750ef43d58ee06a3149b9fce26b6d9b42c9931 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6789518 Reviewed-by: Mark Łobodziński <mark@lunarg.com> Auto-Submit: Cody Northrop <cnorthrop@google.com> Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Mark Lobodzinski 1df94a64 2025-07-25T15:46:42 Tests: Add Dice Dreams ANGLE trace Test: angle_trace_tests --gtest_filter=*dice_dreams Bug: b/434552757 Change-Id: Ie56bd5fee6aebbddc9c613609d636acca11749a6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6789519 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Mark Lobodzinski c8209fec 2025-07-25T10:16:25 Tests: Add Avatar World trace Test: angle_trace_tests --gtest_filter=*avatar_world Bug: b/434146678 Change-Id: I3983c0720f541f5d28a82f4c3bcff7b6ea4252a3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6785913 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Geoff Lang 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>
Yuxiang Qian 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>
Shahbaz Youssefi 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>
Jordan Brown 13f6df49 2025-07-17T20:40:19 Fix the format of the "License" field in README.chromium files. Add missing license for util/android/thrid_party based on license at the source url. Bug: chromium:421988485 Bug: chromium:421989135 Bug: chromium:421988956 Bug: chromium:421988537 Bug: chromium:421988894 Bug: chromium:421989250 Bug: chromium:421988522 Bug: chromium:421988185 Bug: chromium:421989147 Bug: chromium:421988875 Bug: chromium:421988779 Bug: chromium:421988799 Bug: chromium:421988324 Bug: chromium:421988930 Bug: chromium:421988996 Change-Id: I4008229b3031734dd2dc991026cdebe0894c352c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6768429 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Jordan Brown <rop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>