src/tests/gl_tests


Log

Author Commit Date CI Message
Mohan Maiya 05c491e1 2025-03-15T11:56:07 Vulkan: Optimize GraphicsDriverUniforms update Unless RP is closed there is no need to dirty GraphicsDriverUniforms when the program executable changes. Bug: angleproject:386749841 Test: VulkanPerformanceCounterTest.NoUpdatesToGraphicsDriverUniformsOnProgramChange* Change-Id: Id02e8a17de93e2b73103666fc6cc62ce3cdd8f43 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6358315 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 0b98cf97 2025-03-14T16:42:32 Translator: Fix a bug with struct-with-sampler rewrite Bug: chromium:388884060 Change-Id: I8843e0ab9698224020628bedc7a528865d91d2bf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6354207 Commit-Queue: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Mavis Deng d668a13c 2025-03-14T17:18:18 Fix sync issue between XFB output and texture buffer input For the following scenario, where the first draw writes to the transform feedback buffer and the second draw reads from the same buffer as a texture buffer, it is necessary to end the render pass between the two draws and add a pipeline barrier. // xfb write to tex_buffer glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tex_buffer); glBeginTransformFeedback(); glDrawArrays(); glEndTransformFeedback(); // Draw with texture buffer tex_buffer glBindBuffer(GL_TEXTURE_BUFFER_EXT, tex_buffer); glTexBufferEXT(GL_TEXTURE_BUFFER_EXT, ..., tex_buffer); glDraw(); Bug: angleproject:403319685 Change-Id: I9381a336ce61dea696c93158bb617a41afcfc583 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6356070 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Mavis Deng <mavis.deng@arm.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Chris Dalton 292bb458 2025-03-14T12:17:49 Cut MAX_COLOR_ATTACHMENTS_WITH_ACTIVE_PIXEL_LOCAL_STORAGE_ANGLE Since the number of real devices that support framebuffer fetch, but do not support draw_buffers_indexed, is effectively zero, MAX_COLOR_ATTACHMENTS_WITH_ACTIVE_PIXEL_LOCAL_STORAGE_ANGLE is an unnecessary complication. These hypothetical devices can fall back on shader images or just not support pixel local storage at all. This closes the door for WEBGL_shader_pixel_local_storage to ever be implemented on top of the ES2 extension that inspired it all, EXT_shader_pixel_local_storage, but WebGL can just use framebuffer fetch instead, or maybe even EXT_shader_pixel_local_storage2 some day. This dramatically simplifies the WEBGL_shader_pixel_local_storage extension. Bug: angleproject:40096838 Change-Id: I9c51f2ce000620f883cb7917d4e8618c8e9ee803 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6354657 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app>
Shufen Ma fac33bb3 2025-03-13T09:40:56 Refine InterfaceVariablesMatch During glDraw, in function GetMergedVaryingsFromLinkingVariables, function InterfaceVariablesMatch does permissive check, so that two backshader outputs may match one front shader input. Refine that function to do more strict checking. Bug: angleproject:402562396 Change-Id: I04f89dea97809e9621a125ca9385fb7416f7dcc2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6347539 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shufen Ma <Shufen.Ma@arm.com>
Chris Dalton ae71cc1c 2025-03-11T16:36:52 Don't destroy blend or color mask state in PLS The browser caches this state, so conditionally destroying it would invalidate the browser's cache. Instead, cache modifications to overridden PLS blend & color mask state in ContextPrivateState, and restore it upon ending PLS. Also update the spec to specify that FRAMEBUFFER_DEFAULT_WIDTH and FRAMEBUFFER_DEFAULT_HEIGHT may be overridden during PLS in ES 3.1. Bug: angleproject:40096838 Change-Id: Ic2c0aa6dc33ada7350e15e27bef22c79ca5f6c7f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6350727 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Chris Dalton <chris@rive.app>
Chris Dalton b600a42c 2025-03-13T15:18:40 Remove the PLS allow list All the interactions with render passes have been properly solved now, and there is no longer a need for the allow list. Bug: angleproject:40096838 Change-Id: I0219fb8824820e076c128f10f49c85f0f76270ef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6355312 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app>
Chris Dalton fbb1829d 2024-12-08T01:46:39 Allow glClear while PLS is active It just makes sure to not clear any draw buffers that may be in use for pixel local storage. Bug: angleproject:402810076 Bug: angleproject:40096838 Bug: angleproject:42266150 Change-Id: I60a573d5e9e5dbadce12d79e3f4b6fc57747e655 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6312336 Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app>
Yuxiang Qian 44853559 2025-02-25T17:29:54 Correct GLES renderbuffer default values For GLES renderbuffer, the initial value queried for RGBA bits should be 0, and the component type should be GL_NONE according to spec. Correct the default values on ANGLE now. An end2end test is also added. Bug: angleproject:399693196 Change-Id: If8366b3d2350add917054813d3cb9a6a23727da7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6312514 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop db48967f 2025-03-05T09:07:10 Reland "Add GL_BGRA_EXT as a sized renderable format" This reverts commit 4bfb9da6f98b3e28905cc759a77bff750dfe3ff7. Reason for revert: More mapping fixes for GL backend Original change's description: > Revert "Reland "Add GL_BGRA_EXT as a sized renderable format"" > > This reverts commit 8f2fbbd1a0d16471596afad57c88f950a1ee3032. > > Reason for revert: http://anglebug.com/399913714 > > Original change's description: > > Reland "Add GL_BGRA_EXT as a sized renderable format" > > > > This reverts commit 22dfe435daa7c680c07bb8d4f1d98ab765e60ad0. > > > > Reason for revert: Fixed mapping back to BGRA_EXT for GL backend > > > > Original change's description: > > > Revert "Add GL_BGRA_EXT as a sized renderable format" > > > > > > This reverts commit 80093a7d8f850c3ab551ddb4972c2f1f27511433. > > > > > > Reason for revert: suspect for blocking rolling ANGLE into Chroimum > > > https://chromium-review.googlesource.com/c/chromium/src/+/6283973 > > > https://ci.chromium.org/ui/p/chromium/builders/try/chromeos-amd64-generic-rel-gtest/372754/overview > > > > > > Original change's description: > > > > Add GL_BGRA_EXT as a sized renderable format > > > > > > > > dEQP tests were updated to cover GL_BGRA_EXT as a sized renderable > > > > format. It was apparently always supposed to be, based on the > > > > wording of the spec. > > > > > > > > This CL adds that support and updates expectations, along with a few > > > > extra tests. > > > > > > > > Includes contributions from Robic.Sun@arm.com. > > > > > > > > Test: angle_end2end_tests, angle_deqp_*_tests > > > > Bug: b/42267264 > > > > Bug: angleproject:394384906 > > > > Change-Id: Ia10bcd61f66c5d99a3d27a2cfd6008c991ddcaa7 > > > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6235444 > > > > Reviewed-by: Geoff Lang <geofflang@chromium.org> > > > > Commit-Queue: Cody Northrop <cnorthrop@google.com> > > > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > > > > > Bug: b/42267264 > > > Bug: angleproject:394384906 > > > Change-Id: I64572361cfed33b4ea17eabf278f580471d045c2 > > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6285628 > > > Auto-Submit: Yuly Novikov <ynovikov@chromium.org> > > > Commit-Queue: Yuly Novikov <ynovikov@chromium.org> > > > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > > > Bug: b/42267264 > > Bug: angleproject:394384906 > > Change-Id: I1bd9df904d93fd54286cbfce53fe89db89e842b9 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6310699 > > Commit-Queue: Cody Northrop <cnorthrop@google.com> > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > Reviewed-by: Geoff Lang <geofflang@chromium.org> > > Bug: b/42267264 > Bug: angleproject:394384906 > Bug: angleproject:399913714 > Change-Id: I9f79f39a6d9cba3b23c261005bc3e012d70cd1cf > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6312977 > Auto-Submit: Cody Northrop <cnorthrop@google.com> > Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> > Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bug: b/42267264 Bug: angleproject:394384906 Bug: angleproject:399913714 Change-Id: Ifc98fcbb0883dc4a55ad358825e9c1935fa26eaa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6330036 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Kimmo Kinnunen 62bf97d9 2025-03-10T14:23:31 Metal: Fix line loop indexes for primitive restart Use the existing code to generate line strips from line loops. Bug: angleproject:401284933 Change-Id: Ie131199c23b93364fabb8f0dc6766f7e8d5f2b8d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6333539 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Igor Nazarov 9f9a0dfd 2025-03-06T21:20:40 Fix framebuffer attachment format sizes query for Surface Surface as framebuffer attachment is always specified and should return valid format sizes even if extents is empty. At the same time, accessing Window surface sizes without previously acquiring next swapchain image (Vulkan backend) may result in outdated values. In other words, without framebuffer synchronization. This change not only fixes the bugs, but also removes dependency on surface size. Test: angle_end2end_tests --gtest_filter=PbufferTest.ZeroSizedSurfaceFormatQuery/* Bug: angleproject:402532204 Bug: angleproject:397848903 Bug: angleproject:42261031 Change-Id: I736a484caf99e0ff306c244ca13e1eb181222e64 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6329487 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Chris Dalton 97083463 2025-03-10T09:07:16 Polish PLS interactions with xform feedback & QCOM_tiled_rendering For the simplest integration with WebGL, it was decided that glBeginTransformFeedback() and glStartTilingQCOM() should implicitly disable PLS, whereas glBeginPixelLocalStorageANGLE() should fail if either of these modes are active. Bug: angleproject:40096838 Change-Id: I859a496c99c60c5b040c5eac542f43d85872eb30 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6339788 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app>
Chris Dalton 4b39a6a9 2025-03-08T14:16:29 Generate errors for framebuffer invals during PLS Generate GL_INVALID_OPERATION for InvalidateFramebuffer, InvalidateSubFramebuffer, and DiscardFramebufferEXT (and add them to the PLS allow list so we can test the new validation). This is part of a final preparation before deleting the allow list. Bug: angleproject:40096838 Change-Id: If8ffb9c1998ca739798171ae4643a3c9ad3ee049 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6335750 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Chris Dalton 1ead4cbd 2025-03-07T09:49:21 Allow texture modification commands while PLS is active Just do a little extra validation and bounce modifications if they would modify an active PLS plane. Bug: angleproject:40096838 Change-Id: I6f27951f5d0ef5dfaf23b5a005a2d94a749e2c4f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6337703 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app>
Roman Lavrov 235c0be1 2025-03-07T13:48:48 Fix program cache on relink with glTransformFeedbackVaryings glTransformFeedbackVaryings updates mState.mTransformFeedbackVaryingNames, which was then saved to cache during a post-link that might happen after this was executed. Change ::serialize() to save mState.mExecutable->mTransformFeedbackVaryingNames instead, as according to Shabi this is the intended behavior. Also do the same for isSeparable and transformFeedbackBufferMode. Adds a repro where this led to tfvaryings getting loaded from cache into a new program that didn't specify tfvaryings. This resolves the interaction between these tests executed sequentially (such as with --bot-mode): GLSLTest_ES3.UnsuccessfulRelinkWithBindAttribLocation/ES3_Vulkan MultithreadingTest.ProgramLinkAndBind/ES3_Vulkan Bug: angleproject:401554049 Bug: angleproject:383164783 Change-Id: I66c599bc68c537e0cd47fbb99dd61d1d7a8a2824 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6329734 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
Chris Dalton 35ffe55c 2025-03-09T15:00:27 Block framebuffer queries on overridden PLS state Generate an error from glGetFramebufferAttachmentParameteriv() when querying a color attachment that has been overridden by PLS. Bug: angleproject:40096838 Change-Id: I83e68c3527f034f9a24822cf4f57789f81b9b6af Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6338390 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Chris Dalton <chris@rive.app> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 1bfeb8a5 2025-03-03T00:00:00 D3D11: Set SV_Position interpolation for conservative depth HLSL requires centroid interpolation for PS input position if conservative depth output is used and the shader is executing at pixel-frequency. Bug: angleproject:397720825 Change-Id: I2b314e39e40a63cb58e2bdef99ffa842ddaaff0d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6336827 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Chris Dalton 6c2737be 2025-03-06T13:09:44 Allow RASTERIZER_DISCARD while PLS is active Writes to pixel local storage can just be discarded as normal. The only special interaction we need is that BeginPixelLocalStorageANGLE always clears the PLS attachments, even if RASTERIZER_DISCARD is enabled. Bug: angleproject:40096838 Change-Id: I43d00af96b287134d73f08802cea58694fe7d717 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6332026 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxiang Qian e41cbdb5 2025-02-26T17:51:06 Complete the implementation of GL_EXT_buffer_storage Currently, glBufferStorageEXT doesn't set buffer usage to DYNAMIC_DRAW. Also, validation of glGetBufferParameter* misses check for GL_BUFFER_IMMUTABLE_STORAGE_EXT and GL_BUFFER_STORAGE_FLAGS_EXT. This patch fixes these issues. Also, an end2end test is added. Bug: angleproject:399689628 Change-Id: Iecf6bd921f4fff849a5f059adf40043d08edfb7a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6312515 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Shufen Ma 85fe2671 2025-02-25T16:54:20 Set length or infoLog when they are not NULL For glGetProgramPipelineInfoLog, spec says that if length is NULL, then no length is returned. Also do this to infoLog to avoid crash. Bug: angleproject:398904340 Change-Id: I1f87a8932f72a0d5c44c2344936ee18c674a802b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6300356 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Shufen Ma 9bdc6763 2025-03-03T15:54:46 GetProgramPipelineiv may create a new state vector For glGetProgramPipelineiv, spec says that If pipeline is a name that has been generated (without subsequent deletion) by GenProgramPipelines, but refers to a program pipeline object that has not been previously bound, the GL first creates a new state vector in the same manner as when BindProgramPipeline creates a new program pipeline object. Also creates a new state vector in glValidateProgramPipeline if the pipeline has not been previously bound. Modify the ProgramPipeline's validate function so that when the program pipeline is generated, but has never been bound, the validation status would be false. Bug: angleproject:400254603 Change-Id: I906669a4e80aa12283156bae8a72a2dbf0b63b90 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6316349 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 1a0c9db3 2025-02-27T10:43:00 Vulkan: Disable monolithic pipeline creation with GPL As it violates OpenGL ES rules. This change also removes Vulkan perf counter tests that attempt to verify that warmed up programs hit the cache... this fails in non-trivial ways especially with graphics pipeline library due to: - Warm up tasks being async, they may finish after the test reads the perf counters to set expectations - Some drivers report a cache miss when fast-linking libraries... but likely they don't even look at the cache (so both hit and miss would have been inaccurate) - There is no 100% guarantee that the warmup really leads to a draw-time cache hit. Things are made worse by https://chromium-review.googlesource.com/c/angle/angle/+/5421594 because we don't necessarily even wait for the warm up tasks if ANGLE's view of the pipeline description doesn't match what was used for warm up (even if internally to the driver some of the state does not affect the binary blobs). Bug: angleproject:42265839 Change-Id: Iaf96e4f64e2187abc666ff07fe1304d7474a0e86 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6309696 Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Aurora Zhang 4fae3323 2025-03-03T14:21:07 ValidateEGLImageObject should not skip 3D EGLImage * Vulkan and GL backends already support 3D EGLImage, so remove related part in ValidatioinEGLImageObject. * Add a new end2end test for 3D EGLImage. Bug: angleproject:399774384 Change-Id: I6c39298a2f2d4c2dded2d6ddd8b98cdb8a22616a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6311581 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Aurora Zhang <Aurora.Zhang@arm.com>
Amirali Abdolrashidi 2e65d3d4 2025-02-03T16:26:46 Vulkan: Fine-tune submission for multiple RPs This CL aims to fine-tune submission based on a certain command buffer size. This allows us to perform one submission for multiple smaller render passes. * Added mCommandsPendingSubmissionCount to ContextVk. * In ContextVk::syncState(), preferSubmitAtFBOBoundary is only used if the render pass pending command count exceeds the threshold: kMinCommandCountToSubmit * Currently set to 32. * For now, we still submit if the command is a clear (for example glClearBufferfv()). * For now, we also still submit if the command is an invalidate (for example, glInvalidateFramebuffer()). * In ContextVk::flushImpl(), if the pending command count exceeds the threshold (kMinCommandCountToSubmit) and the device is found to be idle, the work is submitted to keep the device busy. * Modified the following unit test from VulkanPerformanceCounterTest: VerifySubmitCounterForSwitchUserFBOToDirtyUserFBO * Since there is now a minimum command count for submission, the number of draw calls has been changed so that the submission is still issued at the new FBO boundary. * After this CL, life_is_strange shows the following improvements: (From the latest measurements) * +19% wall_time * +38% cpu_time Bug: angleproject:42265052 Change-Id: I18452cc1d39ca7e0ac376f6012974b498153cce8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6182927 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Hailin Zhang bd8bc105 2025-02-19T18:08:32 vulkan: disable pipeline cache data serialization for nvidia device. we still see the big cache data issue after driver version 520. rename hasEffectivePipelineCacheSerialization to skipPipelineCacheSerialization. Bug: b/358380399 Change-Id: Idd8354f95c3eb4c2e58678a4cf50c8b6af20f371 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6284126 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Hailin Zhang <hailinzhang@google.com>
Hans Wennborg 1f4708b2 2025-02-28T16:38:36 Fix nullptr argument to std::string constructor Passing nullptr to std::string's constructor is not allowed and the latest libc++ version warns about it. Bug: chromium:399683086 Change-Id: Id43d2d58b8e9df99a811345e46cfe0d8b60c0cca Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6311612 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Hans Wennborg <hans@chromium.org>
Cody Northrop 4bfb9da6 2025-02-28T12:49:28 Revert "Reland "Add GL_BGRA_EXT as a sized renderable format"" This reverts commit 8f2fbbd1a0d16471596afad57c88f950a1ee3032. Reason for revert: http://anglebug.com/399913714 Original change's description: > Reland "Add GL_BGRA_EXT as a sized renderable format" > > This reverts commit 22dfe435daa7c680c07bb8d4f1d98ab765e60ad0. > > Reason for revert: Fixed mapping back to BGRA_EXT for GL backend > > Original change's description: > > Revert "Add GL_BGRA_EXT as a sized renderable format" > > > > This reverts commit 80093a7d8f850c3ab551ddb4972c2f1f27511433. > > > > Reason for revert: suspect for blocking rolling ANGLE into Chroimum > > https://chromium-review.googlesource.com/c/chromium/src/+/6283973 > > https://ci.chromium.org/ui/p/chromium/builders/try/chromeos-amd64-generic-rel-gtest/372754/overview > > > > Original change's description: > > > Add GL_BGRA_EXT as a sized renderable format > > > > > > dEQP tests were updated to cover GL_BGRA_EXT as a sized renderable > > > format. It was apparently always supposed to be, based on the > > > wording of the spec. > > > > > > This CL adds that support and updates expectations, along with a few > > > extra tests. > > > > > > Includes contributions from Robic.Sun@arm.com. > > > > > > Test: angle_end2end_tests, angle_deqp_*_tests > > > Bug: b/42267264 > > > Bug: angleproject:394384906 > > > Change-Id: Ia10bcd61f66c5d99a3d27a2cfd6008c991ddcaa7 > > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6235444 > > > Reviewed-by: Geoff Lang <geofflang@chromium.org> > > > Commit-Queue: Cody Northrop <cnorthrop@google.com> > > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > > > Bug: b/42267264 > > Bug: angleproject:394384906 > > Change-Id: I64572361cfed33b4ea17eabf278f580471d045c2 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6285628 > > Auto-Submit: Yuly Novikov <ynovikov@chromium.org> > > Commit-Queue: Yuly Novikov <ynovikov@chromium.org> > > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > Bug: b/42267264 > Bug: angleproject:394384906 > Change-Id: I1bd9df904d93fd54286cbfce53fe89db89e842b9 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6310699 > Commit-Queue: Cody Northrop <cnorthrop@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Geoff Lang <geofflang@chromium.org> Bug: b/42267264 Bug: angleproject:394384906 Bug: angleproject:399913714 Change-Id: I9f79f39a6d9cba3b23c261005bc3e012d70cd1cf No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6312977 Auto-Submit: Cody Northrop <cnorthrop@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Charlie Lao 055123f8 2025-02-27T10:45:56 Vulkan: Don't maintain SharedCacheKeyManager for BufferBlock Dynamic descriptor type uses the underlying BufferBlock in the descriptorSet. There could be many BufferHelper objects sub-allocated from the same BufferBlock. And each BufferHelper could combine with other buffers to form a descriptorSet. This means the combination for BufferBlock could potentially be very large, in thousands with some app traces like seeing in honkai_star_rail. The overhead of maintaining mDescriptorSetCacheManager for BufferBlock could be too big. In this CL I have chosen to not maintain mDescriptorSetCacheManager in the BufferBlock. The only downside is that when BufferBlock gets destroyed, we will not able to immediately destroy all cached descriptorSets that it is part of. They will still gets evicted later on if needed (see evictStaleDescriptorSets for detail). After this CL, running with all app traces we have, the max vector size of SharedCacheKeyManager::mEmptySlotBits is no more than 2, versus ~70s before the CL. Bug: b/384839847 Bug: b/293297177 Bug: b/237686097 Change-Id: I7c7c91cd0aeacba4145575ac4270b713bf38b742 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6310837 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Cody Northrop 8f2fbbd1 2025-02-27T13:33:06 Reland "Add GL_BGRA_EXT as a sized renderable format" This reverts commit 22dfe435daa7c680c07bb8d4f1d98ab765e60ad0. Reason for revert: Fixed mapping back to BGRA_EXT for GL backend Original change's description: > Revert "Add GL_BGRA_EXT as a sized renderable format" > > This reverts commit 80093a7d8f850c3ab551ddb4972c2f1f27511433. > > Reason for revert: suspect for blocking rolling ANGLE into Chroimum > https://chromium-review.googlesource.com/c/chromium/src/+/6283973 > https://ci.chromium.org/ui/p/chromium/builders/try/chromeos-amd64-generic-rel-gtest/372754/overview > > Original change's description: > > Add GL_BGRA_EXT as a sized renderable format > > > > dEQP tests were updated to cover GL_BGRA_EXT as a sized renderable > > format. It was apparently always supposed to be, based on the > > wording of the spec. > > > > This CL adds that support and updates expectations, along with a few > > extra tests. > > > > Includes contributions from Robic.Sun@arm.com. > > > > Test: angle_end2end_tests, angle_deqp_*_tests > > Bug: b/42267264 > > Bug: angleproject:394384906 > > Change-Id: Ia10bcd61f66c5d99a3d27a2cfd6008c991ddcaa7 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6235444 > > Reviewed-by: Geoff Lang <geofflang@chromium.org> > > Commit-Queue: Cody Northrop <cnorthrop@google.com> > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > Bug: b/42267264 > Bug: angleproject:394384906 > Change-Id: I64572361cfed33b4ea17eabf278f580471d045c2 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6285628 > Auto-Submit: Yuly Novikov <ynovikov@chromium.org> > Commit-Queue: Yuly Novikov <ynovikov@chromium.org> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/42267264 Bug: angleproject:394384906 Change-Id: I1bd9df904d93fd54286cbfce53fe89db89e842b9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6310699 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Mohan Maiya ca7e8882 2025-02-26T14:39:47 Account for relaxed precision conversion data loss 1. Add highp precision qualifier for "expect" uniforms 2. Change EXPECT_EQ -> EXPECT_*NEAR when using mediump Bug: angleproject:391002353 Change-Id: I5a75ec81e622718f989f357fc263ae287c2c7dbc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6306684 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxiang Qian ca8f072e 2025-02-13T16:46:30 Implement EGL_LARGEST_PBUFFER When EGL_LARGEST_BUFFER is set to true during creating a EGL pbuffer surface, it requires the largest available pixel buffer surface when the allocation would otherwise fail. This means if width/height is bigger than config's maxPbufferWidth/maxPbufferHeight, it should be clamp to maxPbufferWidth/maxPbufferHeight. An end2end test is also added. Bug: angleproject:397315935 Change-Id: Ic160d9693478c87b59ece0a421d3acd5d6699ddc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6277912 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Amirali Abdolrashidi e3178f0e 2025-02-24T14:38:36 Add AHB clear tests using glClearTexImage * Add tests to clear AHB images before readback, but using glClearTexImage() instead of using a framebuffer and glClear() * AHBClearAppliedViaClearTexImageBeforeReadBack * AHBTwiceClearViaClearTexImageAppliedBeforeReadBack Bug: b/223456677 Change-Id: Ic5ad2b5202aa24f38dc1783205900a0dab5125f9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6299797 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 5775a974 2025-02-21T11:00:05 Vulkan: Fix transition to FORIEGN and back in same submission Image layout transitions are typically automatically handled. In some cases however, the image layout is specifically "finalized". For foreign images, the relevant cases are all about the point in time when the image is being released. When a foreign image's layout is finalized, a barrier is generated to transition it to the FOREIGN queue on submission. Previously, an incorrect assumption was made that after such a point, the VkImage will no longer be used by any commands. This was incorrect because of EGL Images, which let the same VkImage (and ImageHelper) be shared between multiple textures. The following scenario broke that assumption: - Texture is bound to the (foreign) EGL image - Texture is used and deleted * VkImage's transition back to foreign is cached, but not executed - Another texture is bound to the same EGL image - Texture is used * At this point, the texture is re-acquired from foreign, but it wasn't released in the first place! In this change, a vkQueueSubmit is issued after the foreign image's layout is finalized to make sure the transition back to FOREIGN is applied. Bug: angleproject:42263241 Bug: angleproject:42262454 Bug: angleproject:390443243 Bug: chromium:382527242 Change-Id: Ibe3e6d60f282f9fb0eed1deba3325456017c3617 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6292804 Reviewed-by: mohan maiya <m.maiya@samsung.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Robic Sun 34faa3db 2025-02-08T15:17:10 Fix issue that stride setting is incorrect when rotation is true When rotateXY is true, stride should increase or decrease on the Y axis. Bug: angleproject:395131251 Change-Id: I0f5363c9952ccdf0a036499a9f918853eff7cd10 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6242496 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Robic Sun <Robic.Sun@arm.com>
Aurora Zhang 3972cfa1 2025-02-18T19:52:06 YUV should support on all the shader stages * The spec requires all shader stages should support YUV. Therefore, move YUV related functions out of the switch. * Add a new end2end test that sampling YUV in the vertex shader. Bug: angleproject:391919465 Change-Id: I7811d419d5f1461c2499c522a902c3b2149289a1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6263325 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Aurora Zhang ba174a76 2025-02-19T16:35:15 Vulkan: Bugfix for nullColorAttachmentWithExternalFormatResolve When nullColorAttachmentWithExternalFormatResolve is VK_TRUE, * The imageView in VkRenderingAttachmentInfo for dynamic rendering should be VK_NULL_HANDLE. * Push YUV resolveImageView as if it is the color attachment to ensure the coherency between ops, clearValues and attachmentViews for both dynamic rendering and render pass objects. Then pack the YUV resolve information first as well. * Add end2end tests that render and clear YUV with a depth attachment. Bug: angleproject:395212980 Change-Id: I8b6173b41723ed7dc12359e181791fb1ac22fc41 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6262510 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Alexey Knyazev f9566385 2025-02-06T00:00:00 Fix GetBooleani_v validation That entrypoint must require OpenGL ES 3.1. Fixed: angleproject:394610814 Change-Id: I9ee80d1497afadfdc0d714e49bb97b741ad57b63 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6243878 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Chris Dalton be98f841 2024-11-30T02:11:05 Implicitly end PLS for framebuffer reads and writes In preparation for removing the PLS allow list, convert more problematic methods to the new paradigm of implicitly ending PLS instead of generating errors. Also simplify the disable logic for framebuffer modifications, and just blindly disable PLS for framebuffer updates, regardless of whether it's GL_READ_FRAMEBUFFER or GL_DRAW_FRAMEBUFFER. Bug: angleproject:40096838 Change-Id: Ie4390a219f5f05ef0a3d00f405d4914592726283 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6077335 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov 22dfe435 2025-02-20T06:46:07 Revert "Add GL_BGRA_EXT as a sized renderable format" This reverts commit 80093a7d8f850c3ab551ddb4972c2f1f27511433. Reason for revert: suspect for blocking rolling ANGLE into Chroimum https://chromium-review.googlesource.com/c/chromium/src/+/6283973 https://ci.chromium.org/ui/p/chromium/builders/try/chromeos-amd64-generic-rel-gtest/372754/overview Original change's description: > Add GL_BGRA_EXT as a sized renderable format > > dEQP tests were updated to cover GL_BGRA_EXT as a sized renderable > format. It was apparently always supposed to be, based on the > wording of the spec. > > This CL adds that support and updates expectations, along with a few > extra tests. > > Includes contributions from Robic.Sun@arm.com. > > Test: angle_end2end_tests, angle_deqp_*_tests > Bug: b/42267264 > Bug: angleproject:394384906 > Change-Id: Ia10bcd61f66c5d99a3d27a2cfd6008c991ddcaa7 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6235444 > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Commit-Queue: Cody Northrop <cnorthrop@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/42267264 Bug: angleproject:394384906 Change-Id: I64572361cfed33b4ea17eabf278f580471d045c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6285628 Auto-Submit: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop 80093a7d 2025-02-03T08:50:21 Add GL_BGRA_EXT as a sized renderable format dEQP tests were updated to cover GL_BGRA_EXT as a sized renderable format. It was apparently always supposed to be, based on the wording of the spec. This CL adds that support and updates expectations, along with a few extra tests. Includes contributions from Robic.Sun@arm.com. Test: angle_end2end_tests, angle_deqp_*_tests Bug: b/42267264 Bug: angleproject:394384906 Change-Id: Ia10bcd61f66c5d99a3d27a2cfd6008c991ddcaa7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6235444 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Liza Burakova bc40362b 2025-02-18T13:24:31 Add line loop emulation for draw arrays Bug: angleproject:383356846 Change-Id: I43f4835e17ecb2401418f77555fd70332612e1bf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6090912 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Liza Burakova <liza@chromium.org> Reviewed-by: Matthew Denton <mpdenton@chromium.org>
Shahbaz Youssefi d252425d 2025-02-06T14:51:36 Vulkan: Check source image usage flags in copy paths ... instead of the format feature flags. If the source of the copy is has external format (allowed with glCopy[Sub]TextureCHROMIUM), the format feature checks are unable to query the format features. However, the image usage flags already have the required information (whether the image can be copied from, sampled from, etc). Bug: chromium:383056998 Change-Id: I2ba8820751eb526ef497a8be724193276fd46160 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6238265 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Robic Sun b5584cfd 2025-02-05T15:14:52 ValidTexLevelDestinationTarget should add external related cases GL_TEXTURE_EXTERNAL_OES is not documented in OES_EGL_image_external spec, but we consider that to be an omission in the spec. Bug: angleproject:394380758 Change-Id: Idb5523c173ae0a5910af97639dadff3c5adf9fdf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6232504 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Mohan Maiya eaf06ea7 2025-02-06T13:58:07 Vulkan: Bugfix in resolvePrecisionMismatch(...) Early-return if a varying is not active in either the front or back shader Bug: angleproject:386749841 Test: GLSLTest.MismatchedInactiveVarying* Change-Id: Ie0c6dfd6616afcb94bec043d36d4f8188df8abb3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6239031 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Kimmo Kinnunen 82e25a32 2025-02-03T15:07:33 Make all " < 0" error messages consistent Use the form: Error is due to reason: <error message> Bug: angleproject:392938089 Change-Id: I9e72858cf76a46ab874ffc211afdae1eb93ca05d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6225600 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 9c6af5ce 2025-02-04T22:50:01 Vulkan: Fix crash in SPIR-V transform with varying precision fix Bug: angleproject:386749841 Change-Id: I5743eb049dde6c8a093b175e857251bad9b2bc9a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6232948 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Cody Northrop aa94da02 2025-02-04T12:41:36 Revert "Vulkan: Bugfix in SPIRV entrypoint transformation" This reverts commit 9975e80b9d98a2158ae859b3f4eff7340baa540d. Reason for revert: Crashes on platforms with varyingsRequireMatchingPrecisionInSpirv Original change's description: > Vulkan: Bugfix in SPIRV entrypoint transformation > > Perform varying precision fixer transformation before > other shader-stage-specific transforms that could > potentially modify the interfaceList. > > Also enhance EXTBlendFuncExtendedDrawTest by enabling > additional config with VaryingsRequireMatchingPrecisionInSpirv > feature enabled > > Bug: angleproject:386749841 > Change-Id: Ife4a2f932415296f1565527e50a2b8646cd7697d > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6207741 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: mohan maiya <m.maiya@samsung.com> Change-Id: I07064136f962a7d73ce5c80289da300d474faa22 Test: professional_baseball_spirits trace Bug: b/394299327 Bug: angleproject:386749841 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6227993 Reviewed-by: Cody Northrop <cnorthrop@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Kimmo Kinnunen 7d37d970 2025-01-30T13:47:59 Make error messages end in a dot Some messages had dot and some not. Fix by adding dot to all error message string literals. Best effort, for free form string literals, check ANGLE_CHECK invocation sites only. Bug: angleproject:392938089 Change-Id: Idedc3fe1d1e186fb91b5e54407df87f6830995a0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6218460 Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 03019646 2025-01-29T10:36:38 Vulkan: Fix invalidate of emulated format followed by more draws If invalidating a color image with emulated channels, a clear is automatically staged so the emulated channels don't contain invalid data later. This is problematic with deferred clears; the clear marks the framebuffer attachment as dirty, and the next command causes `FramebufferVk::syncState` to pick the clear up as a deferred clear. This is normally correct, except if the following command is another draw call; in that case, the render pass does not close, yet the clear is cached in `mDeferredClears`. When the render pass later closes, it undoes the invalidate and attempts to remove the clear from the image... but it does not exist there anymore (it's in `mDeferredClears`). Next usage of the image then clears it, undoing the draws after invalidate. In this case, the simplest approach is to close the render pass right away here. Note that it is not possible to make `FramebufferVk::syncState` avoid picking up the clear in `mDeferredClears`, not apply the clear, _and_ keep the render pass open; because future uses of the image (like with |glReadPixels|) will not trigger `FramebufferVk::syncState` and the clear won't be done. Bug: angleproject:353167428 Change-Id: Ie677bd12d9f11953cdcd5e4c374b59c4f63e7456 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6214331 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Liza Burakova 40523499 2025-01-29T12:13:45 WebGPU: Emulate line loops for drawElements Bug: angleproject:383356846 Change-Id: I82a6dfad4a1c5d434f029701611e4b61344655f8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6086120 Commit-Queue: Liza Burakova <liza@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Mohan Maiya 9975e80b 2025-01-28T17:25:38 Vulkan: Bugfix in SPIRV entrypoint transformation Perform varying precision fixer transformation before other shader-stage-specific transforms that could potentially modify the interfaceList. Also enhance EXTBlendFuncExtendedDrawTest by enabling additional config with VaryingsRequireMatchingPrecisionInSpirv feature enabled Bug: angleproject:386749841 Change-Id: Ife4a2f932415296f1565527e50a2b8646cd7697d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6207741 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi 0f75fc3d 2025-01-20T14:10:41 Vulkan: Transition foreign images to the FOREIGN queue on submit Vulkan's interaction with AHB and dmabuf images is through the FOREIGN queue family. When ANGLE uses these images, it must take ownership of the images by doing a queue family ownership transfer (QFOT) away from the FOREIGN queue family and into the graphics queue family used by the Vulkan backend. Prior to this change, ANGLE would do the QFOT away from FOREIGN once such a foreign image is imported into an EGL image. Afterwards, usage in ANGLE works correctly. What ANGLE did not handle is when a foreign entity wants to use these images _after_ ANGLE has used them. For the above to work correctly, ANGLE must do a QFOT back into FOREIGN before the image can be used by the foreign entity. Unfortunately, EGL does not provide a clear point for this hand-off to happen. ANGLE has no choice then to proactively transition the images back into FOREIGN at some point "just in case". For some native drivers, this hand-off to FOREIGN can be quite frequent. For example, on Android for most vendors there is no actual layout transition between graphics and FOREIGN queue families (the actual data layout is the same), so a cache flush/invalidate at strategic points (such as the end of the command buffer) is sufficient as equivalent to transition to FOREIGN (and another at the beginning of the command buffer as equivalent to transition from FOREIGN). As a layer over Vulkan's formalism, ANGLE is less lucky; it has to enumerate exactly which image is being transitioned to and away from FOREIGN. Transitions away from FOREIGN are in principle easy. As long as the image is marked as being in the FOREIGN queue family, it will automatically transition to the graphics queue family on first use. In this change, when a foreign image is transitioned out of the FOREIGN queue, it's added to a list of images to be transitioned back to FOREIGN at submit time. Once submission is done, the image may or may not actually be used by a foreign entity, but ANGLE cannot know that. The next time the image is used in ANGLE, it is transitioned out of FOREIGN. Verifying correctness with multi-threading is tricky, and relies on GL's requirement that access in one context is followed by a synchronization and rebind in another context before it can be used there. This means that the image's transition to FOREIGN (at the end of one submission) naturally happens before the transition back from FOREIGN (at the beginning of the next submission). Because the set of images to transition is tracked in the context, submissions in other contexts don't interfere with the above logic. The situation can be more complicated with one-off submissions, but fortunately, no such usage of foreign images is present. Another wrinkle is simultaneous usage of the image as read-only in two contexts. According to GL, this is not a hazard and requires no synchronization. However this is broken in ANGLE even for non-foreign images (see http://anglebug.com/42266349), because as what _seems_ like read-only usage of the image from GL's point of view (like sampling from the image), there are associated write operations from Vulkan's point of view (image layout transitions and QFOT). This change does not attempt to address this corner case. Bug: angleproject:42263241 Bug: angleproject:42262454 Bug: angleproject:390443243 Bug: chromium:382527242 Change-Id: Idd4ef1fecfa3fccf1a4063f1bddb08d28b85386b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6184604 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Neil Zhang 0554e7f0 2025-01-09T10:05:12 Vulkan: Resume render pass queries when render pass reactivates Bug: angleproject:388144480 Change-Id: Ibcf3b247f347705feed4aa43d237406ccb142704 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6185098 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Xin Yuan c7cfbbc9 2025-01-20T22:31:42 Check if the GLES resources are bound to EGL image Per spec, The resource that will be used to create egl image must not itself be an EGLImage sibling, so validation for the resource in this case should be include. Bug: angleproject:388310036 Change-Id: I2b47e3de4f92beca7ff7a80383a7598c79fdedb0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6170833 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Aurora Zhang 0dabfe5a 2025-01-16T16:00:51 Tests: Supplement EXT_clear_texture tests * Added negative tests in ClearTextureEXTTest.Validation. * According to spec, divided format lists into color renderable and unrenderable two sets. * Bind the renderable format texture as a color attachment to test EXT_clear_texture. * Sample the unrenderable format texture then call glDraw to test EXT_clear_texture. Bug: angleproject:384967031 Change-Id: I71d77ef57772fbb5b174929e9ac2892e7dc3215f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6108999 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Mohan Maiya aa6a9fae 2025-01-16T17:18:59 Vulkan: Selectively enable input attachment usage bit Add VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT iff supportsShaderFramebufferFetchDepthStencil feature is enabled. Also, add noncoherent qualifier in a few FramebufferFetchTest Bug: angleproject:352364582 Change-Id: I09c54a8d738b5cb4cbcf2716cdbff0c0ec9e31cf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6181497 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shufen Ma fc33f0a0 2025-01-15T11:23:25 Add a ReadPixels test for offset alignment check An INVALID_OPERATION error is generated if a pixel pack buffer object is bound and data is not evenly divisible by the number of basic machine units needed to store in memory the corresponding GL data type from table 8.4 for the type parameter. Add a test for this. Bug: angleproject:352963094 Change-Id: I81eda446df5ff29da1326a1f75f5d5aa0825aafd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6170763 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Matthew Denton 8ee72cc7 2025-01-13T13:44:31 WGSL: support matCx2 in uniforms matCx2 in WGSL does not match std140 layout and so it needs to be translated as array<ANGLE_wrapped_vec2, C> when in a uniform. On use it needs to be converted to a WGSL-native matCx2. This also includes the optimization of an array<matCx2> in a uniform--when indexing into it, only the indexed element will be converted to a native matCx2, instead of converting the entire array and then indexing. Bug: angleproject:376553328 Change-Id: I1d84471234b3d3cf4cf361ae89cb61675d5bf9a8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6157788 Reviewed-by: Liza Burakova <liza@chromium.org> Commit-Queue: Matthew Denton <mpdenton@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mavis Deng 3675ca04 2025-01-07T17:59:30 Vulkan: Bugfix for xfb GL_SEPARATE_ATTRIBS mode in PPO case The new executable state transformFeedbackBufferMode should hold the result of the link. An end2end test is added. Bug: angleproject:385662281 Change-Id: I52398ad9a9fe76344b94dac787cae7141924d1dc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6156277 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Xin Yuan 4c1354d9 2025-01-03T14:41:27 Make sure the AHB is not corrupt when bound to egl image The AHB bound to egl image could be corrupt or not a valid ANativeWindowBuffer, it should be validated when creating egl image. Bug: angleproject:387226848 Change-Id: Iefc5506746ceaad92d16b02d5c0838156eee2f9d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6126739 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Neil Zhang 0501d32f 2024-12-23T18:02:54 Draw call with un-aligned index buffer should be checked Bug: angleproject:385264236 Change-Id: I1ff7e93bf4b9ea9020e82f3558e4157b74cb7078 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6151227 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 65513240 2025-01-03T17:26:55 Fix initializing output variables ... by compiling a list of TVariables instead of names that are later looked up. The latter results in wrong symbols being initialized when the output variables are shadowed. Bug: chromium:376738756 Bug: chromium:377553431 Change-Id: I76b9688c035476c547ac73cff380629161210406 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6143374 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Amirali Abdolrashidi fe76d70b 2025-01-10T14:41:06 Vulkan: Enable 16-bit norm support for tex buffers According to the spec for EXT_texture_norm16, it enables texture buffers to support the following additional formats: * GL_R16_EXT * GL_RG16_EXT * GL_RGBA16_EXT All of the above are unsigned short normalized values. * Updated validation to support the aforementioned formats in texture buffers in case of support for the norm16 extension. * Updated AdjustViewFormatForSampler() to also support norm16 values. * Added the condition for advertising textureNorm16EXT that the 16-bit UNORM formats above should have the buffer feature bit for texture buffer support: VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT * Added support check for renderSnormEXT after textureNorm16EXT, since the check for former currently uses the support for latter as a parameter. * Added unit tests to draw using a texture buffer with norm16 formats. * Added TextureBufferTestBase in order to test the API calls in the extensions and the core ES 3.2 version, which the following suites are derived from: * TextureBufferTestES31 (existing) * TextureBufferTestES32 (new) * Extended the tests to similar 8-bit formats. Bug: angleproject:381313704 Change-Id: I49157e8c2c9b5438eaf8d56c1932d12e56489318 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6169006 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Neil Zhang cfe87e34 2024-12-16T16:29:39 Add multisample support for glCopyImageSubDataEXT As GL_TEXTURE_2D_MULTISAMPLE/GL_TEXTURE_2D_MULTISAMPLE_ARRAY been introduced by GLES3.1, glCopyImageSubDataEXT should support those types. Bug: angleproject:381727390 Change-Id: Ib3571ea38dc8d8ceb1bc9ad0c8a6e04d28b0ec33 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6146194 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Matthew Denton c289b30f 2025-01-09T12:49:27 WGSL: Add test for failure case of uniform struct rewrites. Using a uniform struct outside of the uniform address space fails if we've rewritten any of the member types and want to assign to that member. E.g. this line of GLSL, assigning to a member of a struct used in the uniform address space: privUnis.x = float[3](1.0, 1.0, 1.0); Produces this WGSL warning: ERR: DisplayWgpu.cpp:295 (operator()): Error: 2 - message: Error while parsing WGSL: :50:63 error: expected ')' (ANGLE_Convert_ANGLE_wrapped_float_ElementsTo_float_Elements((_uprivUnis)._ux)) = (array<f32, 3>(1.0f, 1.0f, 1.0f)); This adds a test and suppresses it on WGSL. Future design options: https://docs.google.com/document/d/17Qku1QEbLDhvJS-JJ9lPQAbnuZtLxWhG-ha5eCUhtEY/edit?tab=t.0#bookmark=id.r89s1r69tl77 Bug: angleproject:376553328 Change-Id: I57304e9d2a889d00ac4fa02f265198ce3d78e7e2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6165290 Reviewed-by: Matt Denton <mpdenton@google.com> Commit-Queue: Matt Denton <mpdenton@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Liza Burakova <liza@chromium.org>
Matthew Denton b1a0d60f 2025-01-08T15:10:41 WGSL: Fix accidentally overloaded functions Small-stride arrays in uniforms with the same element type, but different array sizes, would cause the WGSL generator to produce conversion functions with the same name but different array sizes. This CL puts the array size in the name of the function to avoid overloading, which is unsupported in WGSL. Bug: angleproject:376553328 Change-Id: I446e91ccb9da2872c88f1a4e05283aacc9d6f8b1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6160334 Commit-Queue: Matt Denton <mpdenton@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Matthew Denton <mpdenton@chromium.org> Reviewed-by: Matt Denton <mpdenton@google.com> Reviewed-by: Liza Burakova <liza@chromium.org>
Yuxiang Qian 2de256cb 2024-12-30T17:26:38 Change some error type in eglCreateImageKHR Following the spec, for eglCreateImageKHR, if target is EGL_LINUX_DMA_BUF_EXT and attribute value is not expected, then EGL_BAD_ATTRIBUTE should be returned. However, ANGLE would return EGL_BAD_PARAMETER. Now change these error handlings to return EGL_BAD_ATTRIBUTE. Also, a end2end test is added. Bug: angleproject:387892107 Change-Id: I73ecfc3da273c0fb5ac362e451fd186209f1a52b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6146196 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen 19ef77a2 2025-01-09T15:37:34 Validate glEGLImageTargetRenderbufferStorageOES renderbuffer glEGLImageTargetRenderbufferStorageOES changes the renderbuffer. Avoid crashing if there is no renderbuffer bound. Bug: angleproject:388616184 Change-Id: I05eacb7a5907d2ca9cde8e91aa7814daa3008c71 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6163503 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Matthew Denton 363f6264 2025-01-07T10:35:09 WGSL: unwrap single array element from uniform ...instead of unwrapping the entire array when only one element is being accessed. The is step #4 from the implementation plan in https://docs.google.com/document/d/17Qku1QEbLDhvJS-JJ9lPQAbnuZtLxWhG-ha5eCUhtEY/edit?tab=t.0#bookmark=id.dt9vmixnpdvo Bug: angleproject:376553328 Change-Id: I6c559f44b75cd1d3c4a478141c11f65a33d76bdf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6102117 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Matt Denton <mpdenton@google.com> Reviewed-by: Matt Denton <mpdenton@google.com> Reviewed-by: Liza Burakova <liza@chromium.org>
Shahbaz Youssefi 6f32ed6c 2025-01-03T23:54:22 Fix struct sampler rewrite vs comma Bug: chromium:377614665 Change-Id: I2c0e8230e31405c9e7fd165a9fca68b7e9f31a76 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6142516 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi d1496a22 2025-01-03T22:54:27 Produce same compile errors for op= as op Bug: chromium:376787367 Change-Id: Ic2c1415c184c603b86876e5eb70eee602639abbf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6142515 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 15b1fb37 2024-12-29T00:38:43 Fix mixing multisampled renderbuffers and textures When querying a renderbuffer's render-to-texture sample count, the number of samples was returned. This made it look like the renderbuffer attachment is MSRTT even if it was really multisampled. When mixed with a multisampled texture (where this mistake wasn't made), the framebuffer completeness code marked the framebuffer incomplete because it looked like one attachment is MSRTT and the other is not. Test credit zephyrxiao@tencent.com Bug: angleproject:382393146 Change-Id: I9fe516d6a92033512646414f88a9848aa1e1edc9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6138979 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Tingwei Guo 83047378 2024-12-20T15:07:02 Add supplement GL_ARM_shader_framebuffer_fetch_depth_stencil tests * Add two tests about detaching the depth attachment and stencil attachment separately works correctly. * Add six tests to test whether multisample, GL_FETCH_PER_SAMPLE_ARM and fragment discard work properly in different situations. Bug: angleproject:385170273 Change-Id: I8a4299e2336a8bf800ffe286775a53f59b407c8e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6108524 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Matthew Denton 53ec86ab 2024-12-17T14:40:31 WGSL: support small stride arrays in uniforms WGSL requires arrays in the uniform address space to have a stride a multiple of 16. This CL makes WGSL translator emit wrapper structs for array element types used in the uniform address space, when the array stride is not a multiple of 16. The exception is for structs that aren't an aligned size of 16n, and for any types matCx2, since they are (or will be) handled in different ways that ensure alignment to 16. This should leave only f32, i32, u32, and vec2. See https://www.w3.org/TR/WGSL/#example-67da5de6 for an example of using a wrapper struct. This requires converting arrays with a wrapper struct element type to arrays with an unwrapped element type when they are first used; this can be "optimized" later for the common case of accessing a single array element, which can then be unwrapped immediately. This CL generates WGSL conversion functions when necessary. After this, the only types that can't yet be used in a uniform are matCx2 and bools. This is #2 in https://docs.google.com/document/d/17Qku1QEbLDhvJS-JJ9lPQAbnuZtLxWhG-ha5eCUhtEY/edit?tab=t.0#bookmark=id.rt3slgehd4te Bug: angleproject:376553328 Change-Id: I1edfa7f481a6cbf5b595643aae8728e67bc4b770 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6092038 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Liza Burakova <liza@chromium.org> Reviewed-by: Matt Denton <mpdenton@google.com> Commit-Queue: Matt Denton <mpdenton@google.com>
Shahbaz Youssefi f80d15ad 2025-01-03T16:19:13 Vulkan: Fix crash with array of array of samplers vs comma Bug: chromium:385256122 Change-Id: I9b356401e7c007060e95bb95ca8269411178ce66 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6143373 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 39882b2b 2024-12-28T12:00:19 Vulkan: Fix flakiness in MultipleProgramsShareDescriptors Precision differences causes the test to be flaky on some vendors. The test is not validating color accuracy, there is no need to use random numbers. Bug: angleproject:42265270 Change-Id: Ied8794d14b394e049e5735d4c42a7baf6e3aca0f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6129616 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi c486ce8c 2024-12-27T06:24:19 Manual roll Chromium from faba6412dc5c to 8bb7bbeac941 (279 revisions) https://chromium.googlesource.com/chromium/src.git/+log/faba6412dc5c..8bb7bbeac941 If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/chromium-angle-autoroll Please CC angle-team@google.com,syoussefi@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Chromium: https://bugs.chromium.org/p/chromium/issues/entry To file a bug in ANGLE: https://bugs.chromium.org/p/angleproject/issues/entry To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Changed dependencies * build: https://chromium.googlesource.com/chromium/src/build.git/+log/63ad9737d7..8f6742f233 * buildtools: https://chromium.googlesource.com/chromium/src/buildtools.git/+log/56013b77b6..2823e220cb * testing: https://chromium.googlesource.com/chromium/src/testing/+log/41bfee6b2b..2344736aa3 * third_party/libc++/src: https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git/+log/11c38d901d..9ba1d4922a * third_party/rust: https://chromium.googlesource.com/chromium/src/third_party/rust/+log/f6418697ac..2559e1ff2f * tools/perf: https://chromium.googlesource.com/chromium/src/tools/perf/+log/e6eba9706f..d0c22105ed No update to Clang. Bug: None Change-Id: I6c019235e8a99d74c91496d1cdfa37b56891d65f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6121262 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Shufen Ma a614c8ab 2024-12-10T11:14:29 Check alpha in ColorMask for YUV target ColorMask is used to mask the writing of R, G, B and A values to all active draw buffers. r, g, b, and a indicate whether R, G, B, or A values, respectively, are written or not (a value of TRUE means that the corresponding value is written) except when the color buffer is in YUV color space, in that case setting any one of the r, g, b, and a values as false would generate draw time INVALID_OPERATION error. Bug: angleproject:383174962 Change-Id: I38c2510c307dd8158e71c920986cb497ca923ff9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6083471 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Tingwei Guo aa263d13 2024-12-19T17:48:13 Increase GL_MAX_ARRAY_TEXTURE_LAYERS to 4096 and end2end test Increase GL_MAX_ARRAY_TEXTURE_LAYERS from 2048 to 4096, and add an end2end test to test whether the increased GL_MAX_ARRAY_TEXTURE_LAYERS meets the memory limit. Bug: angleproject:385040554 Change-Id: Ibb1ebcb2414c530dd838b3414dc82b14ce017bc4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6108301 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuxin Hu febba52a 2024-12-12T17:26:59 Optimize for swap after clear Bug: angleproject:382006939 Change-Id: Ia6b9a53042a1d188dbd5a5f6436f17ca1e389a4e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6072416 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Amirali Abdolrashidi bb640019 2024-12-18T12:36:13 Vulkan: Fix partial clear texture for RGB8 snorm When clearing an RGB8 snorm texture, due to this format not being renderable, a temporary buffer is filled with the clear value and applied to the image as a buffer update. However, this buffer's unpack state has nothing to do with the context's unpacking state. This should be reflected on the pixel unpack state that is used to calculate the required buffer size for the update. Otherwise, it can result in wrong colors for parts of the image. * Updated the pixel unpack state in the unrenderable part of the clear function for textures (TextureVk::clearSubImageImpl()). * It will now use "1" as the alignment since it is tightly packed. * Added unit test to clear one corner of an RGB8 snorm texture and use it for drawing. * Clear2DRGB8SnormCorner Bug: angleproject:384765600 Change-Id: Id302a9f4049626aae1a68798e86d7183d5c264e0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6108140 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Yuxiang Qian db8e5617 2024-10-23T15:21:33 Reland "Add check for some EGL API attrbute values" This is a reland of commit 9481eb625b358897583f8adeca5fc520f8c215ae Original change's description: > Add check for some EGL API attrbute values > > EGL validation in ANGLE lacks of some error handlings mentioned > in EGL spec. Those error handlings are added, and we need to > make sure angle end2end tests are not influenced. > > Bug: angleproject:375528200 > Change-Id: Ic0686d9ccc70e18b0cf3449184452771c77c06b7 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6034532 > Reviewed-by: Charlie Lao <cclao@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:375528200 Change-Id: I6db890a95825156848d7da8ebc15f7e30b0902ba Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6088519 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Yuxin Hu c0ee7b20 2024-12-12T16:49:40 Swap getWidth() and getHeight() if the swapchain is 90 emulate rotated When checking if we need to recreate swapchain, we should swap the getWidth() and getHeight() if Is90DegreeRoration(mEmulatedPreTransform) is true. This is because: When creating swapchain, if Is90DegreeRoration(mEmulatedPreTransform) is true, we store swapped mSurfaceCaps.currentExtent.width and mSurfaceCaps.currentExtent.height in getWidth() and getHeight(), but we use the original mSurfaceCaps.currentExtent.width and mSurfaceCaps.currentExtent.height to create the swapchain. On next acquire, to check if the swapchain property changes, we should swap getWidth() and getHeight() if if Is90DegreeRoration(mEmulatedPreTransform) is true, otherwise we are recreating swapchains when width and height are unchanged. Bug: b/382006939 Change-Id: I1cbe9da2ff5e76602a90963514d2d0d5fbf677e7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6090199 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi e72cc71b 2024-12-13T11:59:29 Vulkan: Remove framebuffer fetch from shader if unused Some application shaders may use `inout` variables to simplify shader generation (presumably), but in the end don't actually ever read from those variables. This change tries to detect some very simple but common cases where it's clear that the shader completely overwrites the variable without reading from it and turns `inout` into `out`. When coherent framebuffer fetch emulation kicks in, these shaders would no longer cause unnecessary barriers. Bug: angleproject:377923479 Change-Id: I0970b72f551b24409337a375cf97aa63bb511fb5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6094425 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Roman Lavrov <romanl@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com>
Shahbaz Youssefi 2c404434 2024-12-13T09:05:48 Revert "Add check for some EGL API attrbute values" This reverts commit 9481eb625b358897583f8adeca5fc520f8c215ae. Reason for revert: Causes failures when rolling into chromium: https://chromium-review.googlesource.com/c/chromium/src/+/6089841 Original change's description: > Add check for some EGL API attrbute values > > EGL validation in ANGLE lacks of some error handlings mentioned > in EGL spec. Those error handlings are added, and we need to > make sure angle end2end tests are not influenced. > > Bug: angleproject:375528200 > Change-Id: Ic0686d9ccc70e18b0cf3449184452771c77c06b7 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6034532 > Reviewed-by: Charlie Lao <cclao@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:375528200 Change-Id: I8e59113e4d94571b0ec1d8135519e829d3571a15 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6094284 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Shahbaz Youssefi c75bd915 2024-12-10T23:01:44 Vulkan: Remove asyncCommandQueue It's been years and it never showed an advantage. In the meantime, performance without this feature seems close to native drivers (i.e. the feature has lost its appeal) and it's frequently a source of complication and bugs. Bug: angleproject:42262955 Bug: angleproject:42265241 Bug: angleproject:42265934 Bug: angleproject:42265368 Bug: angleproject:42265738 Bug: angleproject:42266015 Bug: angleproject:377503738 Bug: angleproject:42265678 Bug: angleproject:173004081 Change-Id: Id8d7588fdbc397c28c1dd18aafa1f64cbe77806f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6084760 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi fc4fc174 2024-12-10T22:01:28 Vulkan: Prevent crash with D/S FF without D/S attachment The spec says that the values for gl_LastFragDepth/StencilARM are undefined if there is no depth/stencil attachment. This "just" works on tiling GPUs, because reading input attachments simply translates to reading _something_ from the tile memory. For ANGLE, the situation is a little more complicated. ANGLE has to bind descriptors for input attachments (because non-tilers read from the input attachment descriptor instead of using the knowledge that input and color/depth/stencil attachments are one and the same thing in tile memory). When a depth/stencil attachment is missing, there is no image to bind to the descriptor set. ANGLE cannot skip binding an image to the descriptor set, because OpImageRead (translated from subpassLoad()) attempts to access the input descriptor; skipping this causes an internal crash in SwiftShader for example. ANGLE cannot bind a bogus image as input attachment, as Vulkan requires that input attachments are also color/depth/stencil attachments. ANGLE _could_ bind a bogus image as input attachment and also as depth/stencil attachment. This is rather risky, as it then also has to be careful to make sure that depth/stencil attachment is never actually used (i.e. it affects the depth/stencil state, load/store ops etc). In this change, the shader itself is modified to remove references to the depth/stencil input attachments if the attachment is missing. This is rather inefficient, as it means the pipeline warmup will not produce a usable pipeline, but it's accepted as a workaround for something apps shouldn't really be doing. Bug: angleproject:376572258 Change-Id: I0de68252b61615cb82cba7d1730699aadf41e92f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6085368 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi e9ba1681 2024-12-10T21:29:26 Vulkan: Fix DR vs FF vs non-draw RP start DR is Dynamic Rendering FF is Framebuffer Fetch RP is Render Pass With DR, whether framebuffer fetch is used or not is no longer tracked in the framebuffer's RenderPassDesc, because that property has no bearing on the framebuffer anymore. It still exits in RenderPassDesc to support legacy VkRenderPass objects. After a draw call starts a render pass, the state of the command buffer's copy of RenderPassDesc (copied from the framebuffer's) is updated to include the correct framebuffer fetch mode. However, this was not done when the render pass starts through other means, such as when a scissored or masked clear would call `Context::startRenderPass`. This change moves the aforementioned update of the framebuffer fetch mode to `Context::startRenderPass` so it affects everywhere the render pass may start from. Bug: angleproject:383356851 Change-Id: I82eff43863fc5b9fe67e57453269ee73859a6cd7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6085367 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Yuxiang Qian 9481eb62 2024-10-23T15:21:33 Add check for some EGL API attrbute values EGL validation in ANGLE lacks of some error handlings mentioned in EGL spec. Those error handlings are added, and we need to make sure angle end2end tests are not influenced. Bug: angleproject:375528200 Change-Id: Ic0686d9ccc70e18b0cf3449184452771c77c06b7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6034532 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shufen Ma f9d08964 2024-10-29T14:14:43 Fix primitive restart issue with line loop Refine function CopyLineLoopIndicesWithRestart and function CopyLineLoopIndicesWithRestart so that they can deal with the case when there is only one index before/after restartIndex. Bug: angleproject:376097643 Change-Id: I06ee0208522d6dc5b6cd6ec0ba4f8682de7b12f3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5975353 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Neil Zhang e45a0420 2024-12-05T17:41:38 Fix glCopyImageSubData() not work with multisample render buffer When target is "GL_RENDERBUFFER", and which is multisample, the function will not work. Bug: angleproject:382101118 Change-Id: I3d9c4a2550f9d66eeb73447328a03d4507cf2fa5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6073359 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shufen Ma 2d71fe0d 2024-11-04T14:15:34 Check formats compatibility first in CopyImageSubData validation During validation for CopyImageSubData, first check if the src and dst formats are compatible. Before this patch, the check was put after region checking. If the formats are not compatible, then the block size used during region check is not reasonable. Bug: angleproject:377144455 Change-Id: I3245ae1351e127cb70d0d75d75ca34f0106d12b6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5982240 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Charlie Lao d8f6df3e 2024-12-09T09:20:40 Vulkan: Fix assertion in RefCountedEvent::releaseImpl RefCountedEvent uses non-atomic uint32_t for reference counting, so it is not thread safe. To ensure we do not use it in a thread unsafe way, there is an assertion I added in RefCountedEvent::releaseImpl that the release call is not come from async command queue thread (all release calls are expected come from context thread which should be protected by context share group lock). A while ago dynamic rendering is implemented. With dynamic rendering you can't do final layout change in render pass. So the final layout change to Present is added to primary command buffer at the end of RenderPassCommandBufferHelper::flushToPrimary(). And if async command queue is enabled, that flushToPrimary is called from async command queue thread, which triggers the assertion I added in RefCountedEvent::releaseImpl(). This CL releases mCurrentRefCountedEvent for this specific situation (present image + dynamic rendering + asyncCommandQueue) so that we do not hit the assertion. The only downside is that it will force to use pipelineBarrier for this specific situation. But no one ships with asyncCommandQueue enabled, so there is no real concern here as well. Bug: angleproject:382580875 Change-Id: I042e3906db7f5bb7acb299997f8fc7e21b8350b6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6072350 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 70c62566 2024-12-06T15:20:49 Vulkan: SharedFence is now AtomicSharedPtr<RecyclableFence> This is the preparation before the next CL: Vulkan: Improve CommandQueue concurrency crrev.com/c/angle/angle/+/6067346 The `SharedFence` was replaced with `AtomicSharedPtr<RecyclableFence>` because previous implementation reference counting is not thread safe which will be required in the next CL, where fence may be released during unlocked wait or release commands using different mutexes. Additionally cleanup unnecessary use of `vk::` namespace. Bug: b/362604439 Change-Id: Icc61dc093ba0a1e350f1a02eb1ba209a2c58c603 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6074131 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Roman Lavrov 22c457a6 2024-12-06T16:07:54 Tests: VulkanMemoryTest OOM fallbacks check >= instead of == OOM tests check deviceMemoryImageAllocationFallbacks in a loop, assuming that +1 will be reached. Maybe we are skipping over +1 somehow. Check for >= instead. The loops are followed by EXPECT_EQ, so if this happens the test would still fail. Bug: angleproject:382094011 Change-Id: Icfc93954b4a7ba30e24ae087d7a0c03d640e85b3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6077964 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Roman Lavrov <romanl@google.com>
Alexey Knyazev e82a2eab 2024-11-28T00:00:00 Support multisample 2D array textures on ES 3.0 contexts Supported via OES_texture_storage_multisample_2d_array enabled together with ANGLE_texture_multisample. Drive-by: Fixed exposure conditions in the OpenGL backend to match the implementation. Fixed: angleproject:382298321 Change-Id: I21b037aac7bebc35df267e9dd468088ebce35e71 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6075241 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Alexey Knyazev 26414249 2024-11-28T00:00:00 Remove GetTexLevelParameter* from ANGLE_texture_multisample These functions are always provided by the GL_ANGLE_get_tex_level_parameter frontend extension. Fixed: angleproject:382291448 Change-Id: I59b4ccc56478f2e0931d1f5bd665cfdd5a34391e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6072222 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Charlie Lao e42047f0 2024-10-25T13:50:28 Vulkan: Disable DescriptorSet cache for SwiftShader Performance with swiftShader is not critical and cache code path not making much difference for SwiftShader renderer anyway. This CL disables descriptor set cache for SwiftShader mainly to ensure the code path gets test coverage on CI bots. This code path also ensures that we are tagging ResourceUse on DescriptorSetHelper properly after every use. Otherwise, it is very hard to test with cache enabled code path since object usually won't get destroyed due to cache and any bug associated with this is going to be very hard to debug. This CL has catch such bugs during the descriptor set cache work. Bug: angleproject:372268711 Change-Id: Iee1028f9378cf4f537d897e08746d5cf958f225a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6047805 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mavis Deng 045f2818 2024-12-03T09:55:39 End2end test for GL_MAX_SHADER_STORAGE_BLOCK_SIZE validation Bug: angleproject:381742474 Change-Id: Icae7b2705f5749bc070e096fa045e68bb061b530 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6065459 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>