src/libANGLE/renderer/wgpu/VertexArrayWgpu.cpp

Branch


Log

Author Commit Date CI Message
Liza Burakova 718cdb91 2025-09-08T15:32:34 [WebGPU] Set ReadPixels to use context's command encoder. This change modifies ContextWgpu::getCurrentCommandEncoder() such that it now ends a render pass if there's an active one, ensures a command encoder is created, then sets an outHandle command encoder. This streamlines a lot of repetitive calls when getting the command encoder. This change also modifies ImageHelper::readPixels such that it now gets the command encoder from the context instead of making its own. This ensure that when the queue is submitted for a read call, that any draw/clear/etc calls in the queue are also submitted for a texture so that a read call can properly read from the texture. Bug: angleproject:438268609 Change-Id: Iec6d7f7ca27c7640cc8bdb42da53f64e4836dc5a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6923328 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Liza Burakova <liza@chromium.org> Reviewed-by: Matthew Denton <mpdenton@chromium.org>
Liza Burakova f32fa362 2025-09-02T16:14:44 [WebGPU] Add helper methods for streaming indices in syncClientArrays Bug: angleproject:401499251 Change-Id: I2cab62524ce92a01117282726a3d4de1c266f818 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6438259 Reviewed-by: Matthew Denton <mpdenton@chromium.org> Commit-Queue: Liza Burakova <liza@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tom Sepez 25390156 2025-08-21T00:13:19 Suppress unsafe buffers on a file-by-file basis in src/ [1 of N] In this CL, we suppress many files but stop short of actually enabling the warning by not removing the line from the unsafe_buffers_paths.txt file. That will happen in a follow-on CL, along with resolving any stragglers missed here. This is mostly a manual change so as to familiarize myself with the kinds of issues faced by the Angle codebase when applying buffer safety warnings. -- Re-generate affected hashes. -- Clang-format applied to all changed files. -- Add a few missing .reserve() calls to vectors as noticed. -- Fix some mismatches between file names and header comments. -- Be more consistent with header comment format (blank lines and trailing //-only lines when a filename comment adjoins license boilerplate). Bug: b/436880895 Change-Id: I3bde5cc2059acbe8345057289214f1a26f1c34aa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6869022 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: 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>
Geoff Lang 70b90f22 2025-05-09T16:51:31 WebGPU: Use the C API only from the proc table Define WGPU_SKIP_DECLARATIONS so that errors are generated when using the global c or cpp functions. The default proc table getter requires the cpp API is visible. Hide this in a new wgpu_proc_utils so the rest of the WebGPU backend cannot see those APIs. Bug: angleproject:342213844 Change-Id: Ia1e9bfd25b0bb538cebeaa0efe7b9d2eeabc990d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6534317 Reviewed-by: Liza Burakova <liza@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Matthew Denton <mpdenton@chromium.org>
Geoff Lang 3158d638 2025-05-06T17:08:56 WebGPU: Store the WebGPU proc table in wrappers Instead of relying on the global WebGPU functions, pass the proc table to the object wrappers. Bug: angleproject:342213844 Change-Id: I79a5e819ffac5b366fed0a159a6cef116b5e82b3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6514676 Reviewed-by: Liza Burakova <liza@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Matthew Denton <mpdenton@chromium.org>
Geoff Lang 147f4810 2025-05-05T16:33:19 WebGPU: Use WebGPU C API for Display and error utils Bug: angleproject:414831373 Change-Id: I56f90e453a746399c65956cc73eb4fcb020bcb5e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6512148 Reviewed-by: Matthew Denton <mpdenton@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Liza Burakova <liza@chromium.org>
Geoff Lang 1faf6ef2 2025-05-05T15:18:58 WebGPU: Use WebGPU C API for Programs and Buffers Bug: angleproject:414831373 Change-Id: I773f26483f53957bdfb8321b2a557df7febb376c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6512147 Reviewed-by: Matthew Denton <mpdenton@chromium.org> Reviewed-by: Liza Burakova <liza@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen 78048112 2025-01-15T15:13:14 Fix IndexRange::vertexIndexCount calculation Use only one loop. Avoid redundant primitive restart index parameter. Avoid calling GetPrimitiveRestartIndexFromType() because the algorithm relies on the value being numeric_limits<T>::max(). Fixes a bug where primitive restart case would process the value after first primitive restart twice, once in both for loops. This would result in incorrect vertexIndexCount. Fix by removing IndexRange::vertexIndexCount, and instead using IndexRange::mCount == 0 to signify empty range. Bug: angleproject:401284933 Change-Id: Ifaeb9949f2e852fb7c5ef80bc47f72bfabba21a6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6333541 Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Liza Burakova 3dcf109d 2025-04-10T17:19:09 WebGPU: Refactor syncClientArrays. This change adds a few helper methods for syncClientArrays to improve readability Bug: angleproject:401499251 Change-Id: Ida427f80e07f469b83ff12850169b2110e65743c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6441946 Reviewed-by: Matthew Denton <mpdenton@chromium.org> Commit-Queue: Liza Burakova <liza@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Liza Burakova 5024ccef 2025-03-25T11:37:19 WebGPU: Emulate line loops with primitive restarts Bug: angleproject:383356846 Change-Id: Iab1d658cb3c5e32f88241f6757d1c2e5a84bf8ec Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6297524 Commit-Queue: Liza Burakova <liza@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
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>
Geoff Lang 9f8d7cc2 2025-01-23T13:27:19 WebGPU: Stream incompatible vertex and index data. Support reading back index and vertex buffers to stream incompatible source data. For now this includes: * Non-multiple-of-4 stride vertex data * Stride not a multiple of the type size * Unsigned byte indices Fix fallback formats so that all GLES formats have a fallback. Fix CopyToFloatVertexData writing the alpha channel as Float32One with a static_cast which converted Float32One (an integer) to a float instead of bit-casting. Bug: angleproject:368602384 Change-Id: I7eb1ba7ad1ec4292060c18de22f5948136cbb0a3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6194556 Reviewed-by: Liza Burakova <liza@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: 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>
Geoff Lang 37dd8e92 2024-09-20T17:49:11 WebGPU: Stream client arrays Add support for vertex attributes and index data without buffer backings. Stream the data to buffers at draw time. Bug: angleproject:368602384 Change-Id: I697b7882cdebf0dfab08fcffabd2d36048920547 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5878137 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Geoff Lang 0b610712 2024-09-20T12:00:17 WebGPU: Sync index buffers, add indexed draw calls Bug: angleproject:368600230 Change-Id: Ibf1c4921635b525b7650e70ce7dc939e2bad2ebb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5828229 Reviewed-by: Liza Burakova <liza@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Liza Burakova bb14aa4d 2024-09-19T11:17:05 WebGPU: set vertex buffers. This change actually sets the vertex attributes that are added to the render pipeline description owned by the context, as well as sets the vertex buffer in the pipeline. Bug: angleproject:359823692 Change-Id: I5e94b357a4e6eadc1bbba54965cef94f90113b4e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5789155 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Liza Burakova <liza@chromium.org>
Liza Burakova 84492ff3 2024-09-10T13:11:07 Sync vertex attributs in VertexArrayWgpu. This change only sets vertex attributes within VertexArrayWgpu and sets them in the render pipeline description owned by the context. It does not yet set attributes in the output pipeline created in CreatePipeline, as vertex buffers are also not set yet. Bug: angleproject:359823692 Change-Id: I1c3848e15d790026d53d4ab5614b1125f773e06a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5781788 Commit-Queue: Liza Burakova <liza@chromium.org> Reviewed-by: Matthew Denton <mpdenton@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Liza Burakova f2c00e8c 2024-01-18T18:36:33 Adding Dawn stub backend to ANGLE Bug: angleproject:8473 Change-Id: I81ea83986e4e566169aa82250b5cfb727985ed01 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5201413 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Liza Burakova <liza@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>