src/tests/gl_tests


Log

Author Commit Date CI Message
Shahbaz Youssefi 0a67bbaf 2024-04-08T10:14:45 SPIR-V: Fix const constructors with single scalar These constructors may be generated because of RemoveArrayLengthTraverser. Bug: chromium:332546345 Change-Id: I5b81ded59ba91b0083b14280f5a61b03b9d4ca43 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5435713 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya ba208b45 2024-04-06T21:08:15 Vulkan: wait for post-link tasks in resetLayout Wait for post-link tasks before resetting ProgramExecutableVk. Otherwise mGraphicsProgramInfos, which post-link tasks use to create pipeline, can be prematurely invalidated. Bug: angleproject:8297 Tests: Texture2DTestES3YUV*DisableProgramCaching Change-Id: Ib84cebad252777ae4c37cb32c455c326911416a2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5430927 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 13829f20 2024-03-26T23:03:12 Vulkan: Optimize depth/stencil resolve with glBlitFramebuffer Like color resolve, depth/stencil resolve is now also possibly done by modifying the render pass and attaching a depth/stencil resolve attachment. Bug: angleproject:7551 Change-Id: I045e3875e24006d2473a55b6c3856dd768fe8b84 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5398004 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 103c1b53 2024-03-29T14:37:23 Vulkan: Drop MSRTT emulation dependency on independentResolveNone Usage of VK_RESOLVE_MODE_NONE was removed in [1], but dependency to this property was accidentally added in [2]. [1]: https://chromium-review.googlesource.com/c/angle/angle/+/2743666 [2]: https://chromium-review.googlesource.com/c/angle/angle/+/3353895. Bug: angleproject:4836 Change-Id: I25028b5d343686edd794acdac3714c4a6cb5fa17 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5407073 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 57eded36 2024-04-03T23:02:39 Vulkan: Fix off-by-one error in compute-based stencil blit The coordinates used for sampling were calculated based on pixel's top-left (integer) coordinates and used with a NEAREST sampler. This resulted in two bugs: - When X was flipped, the bounds check rejected the first column - The sampling could pick the wrong pixel as the on-the-edge coordinates could map to either of 4 pixels that share that corner. This change moves the sampling coordinates to the pixel's center. Bug: angleproject:8652 Change-Id: I0b54fa0bad366f52f8e6c17bb0054fa373af8b5c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5420834 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 58ecad7a 2024-04-03T23:12:05 Remove assertion that program is not linking when bound/unbound It's valid to link a program, let it happen in parallel and in the meantime bind and unbind the program in other contexts. The add/release ref functions were asserting that link is resolved, which is not true in that case. Bug: angleproject:8647 Change-Id: I784b5adbb04f062752a873deb1e7a4aaf4527e33 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5420990 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Geoff Lang 64cfbb68 2024-04-02T13:22:09 GL: Fix MultisampledRenderToTexture tests and expectations Some MSRTT tests were failing on the GL backend due to exact GL_EQUAL depth tests, others were marked as skipped on all of Android due to old device issues. Update the Android expectations for these tests. Bug: angleproject:8642 Change-Id: I2aad2637773967102a6172fd0a8ae2cb58a420ee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5413775 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@google.com>
Alexey Knyazev 18797bf2 2024-03-28T00:00:00 Metal: Handle incompatible attachments Metal runtime fails if the attachment pixel formats are not compatible with the program outputs or if the corresponding render pass and pipeline pixel formats do not match. Added Metal-specific state tracking and forced draw framebuffer syncronization for such cases. Cleaned up and reduced Framebuffer::setAttachmentImpl. Fixed: angleproject:5233 Change-Id: I4ee01889debe0e3cce54635e6cba62dbfdc02722 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5377813 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 84eb4f73 2024-03-26T15:44:48 Add a few use-after-resolve depth/stencil framebuffer tests Bug: angleproject:7551 Change-Id: I42c1a6b8fe8714fd9c1568d216b12ee9a001aba5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5399137 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi a0fa06f6 2024-03-25T14:46:56 Translator: Disallow samplers in structs in interface blocks As disallowed by the spec: > Types and declarators are the same as for other uniform variable > declarations outside blocks, with these exceptions: > > * opaque types are not allowed Bug: chromium:328859176 Change-Id: Ib94977860102329e520e635c3757827c93ca2163 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5391986 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 0e9254bd 2024-03-25T16:37:51 Vulkan: Optimize color invalidates By not flushing the render pass when there is an invalidate. Previously, the tracking of invalidation, write to attachments, management of load/store ops, and whether image contents are defined or not have all been unified between color and depth/stencil images. As such, it is possible to not close the render pass when a color image is invalidated just as is not done for depth/stencil images. Together with the optimization to resolve attachments [1], it is now finally possible to efficiently do MSAA rendering with ANGLE. Note that the optimization to use resolve attachments for depth/stencil is not yet implemented. For color only, the perf test added in [2] shows the following improvement on Pixel 6: - Single sampled rendering: ~2.73ms - Resolve + invalidate (before optimizations): ~3.54ms - Resolve + invalidate (after this change): ~2.85ms [1]: https://chromium-review.googlesource.com/c/angle/angle/+/5388492 [2]: https://chromium-review.googlesource.com/c/angle/angle/+/5392548 Bug: angleproject:7551 Change-Id: I008adf9f53df97ab464b0a0399f0b312bf4d0d3f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5391905 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 9475ac40 2023-11-15T10:25:06 Vulkan: Make efficient MSAA resolve possible Prior to this change, using a resolve attachment to implement resolve through glBlitFramebuffer was done by temporarily modifying the source FramebufferVk's framebuffer description. This caused a good deal of complexity; enough to require the render pass to be immediately closed after this optimization. The downsides to this are: - Only one attachment can be efficiently resolved - There is no chance for the MSAA attachment to be invalidated In this change, resolve attachments that are added because of glBlitFramebuffer are stored in the command buffer, with the FramebufferVk completely oblivious to them. When the render pass is closed, either the FramebufferVk's original framebuffer object is used (if no resolve attachments are added) or a temporary one is created to include those resolve attachments. With the above method, the render pass is able to accumulate many resolve attachments as well as have its MSAA attachments be invalidated before it is flushed. For a FramebufferVk that is resolved in this way, there used to be two framebuffers created each time and thrown away as the code alternated between starting a render pass without a resolve attachment and then closing with one. With this change, there is now one framebuffer (without resolve attachments) that is cached in FramebufferVk (and is not recreated every time), and only the framebuffer with resolve attachments is recreated every time. Ultimatley, when VK_KHR_dynamic_rendering is implemented in ANGLE, there would be no framebuffers to create and destroy, and this change paves the way for that support too. WindowSurfaceVk framebuffers are still imagefull. Making them imageless adds unnecessary complication with no benefit. ----------------- To achieve efficient MSAA rendering on tiling hardware, applications should do the following: ``` glBindFramebuffer(GL_FRAMEBUFFER, msaaFBO); // Clear the framebuffer to avoid a load // Or invalidate, if not needed to load: // glInvalidateFramebuffer(GL_DRAW_FRAMEBUFFER, ...); glClear(...); // Draw calls // Resolve into the single sampled framebuffer glBindFramebuffer(GL_DRAW_FRAMEBUFFER, resolveFBO); glBlitFramebuffer(...); // Immediately discard the contents of the MSAA buffer, to avoid store glInvalidateFramebuffer(GL_READ_FRAMEBUFFER, ...); ``` The above would translate to the following Vulkan render pass: - MSAA LOAD_OP_CLEAR/DONT_CARE - MSAA STORE_OP_DONT_CARE - Resolve LOAD_OP_DONT_CARE - Resolve STORE_OP_STORE This makes sure the MSAA data doesn't leave the tile memory and greatly reduces bandwidth usage. Once anglebug.com/4892 is fixed, this would also allow the MSAA image to never be allocated either. Bug: angleproject:7551 Bug: angleproject:8625 Change-Id: Ia9f4d20863d76a013d8495033f95c7b39f77e062 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5388492 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Matthew Denton eacd6acd 2024-03-22T05:38:13 Add RenderTargetCache to FramebufferWgpu ...and update it based on dirty bits. Bug: angleproject:8582 Change-Id: If227392b24b3fc649d48cb1bce1144400cd98d70 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5386900 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Liza Burakova <liza@chromium.org> Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Shahbaz Youssefi c7985668 2024-03-19T15:52:01 Add a few use-after-resolve framebuffer tests Bug: angleproject:7551 Bug: b/330697097 Change-Id: I0006d80edc0162182b2da9cea2c0e719f90fa8e0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5376619 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Geoff Lang e996d187 2024-03-19T13:29:24 Use TIntermRebuild for SeparateStructFromFunctionDeclarations This now handles the case of nested function calls to functions that define a struct in the return type all resolving to the correct re-written function. Bug: chromium:329271490 Change-Id: I43904e09ec9c284c1b51c09b2caaab253f7b29b9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5376613 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 8899e18d 2024-03-21T14:30:50 Add skip conditions for a few tests 1. Skip EGLBlobCacheTest if `CacheCompiledShader` feature is disabled 2. Skip RGBAHBUploadDataColorspace test if allocating RGB8 AHB with requested usage flag is not supported Bug: angleproject:7036 Bug: b/298037344 Change-Id: I07c48df327a879c1d46873f47bb5bd305e07a758 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5386030 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop 96f66089 2024-03-19T14:08:04 Tests: Update color values for Unsized/Unsigned in texture tests Some of the values don't make sense, appear to be copy/paste errors. Likely pass on non-Android due to sizable error tolerance. Also turn on float tests that just work. Test: angle_end2end_tests --gtest_filter=Texture*Copy*/ES3_Vulkan Bug: angleproject:4756 Bug: angleproject:8620 Change-Id: I3fffb7859421bc179e3e5dd6bca14b4e2ac378ee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5381400 Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 914fe61b 2024-03-15T13:20:49 Vulkan: Rename RendererVk.* to vk_renderer.* Done in a separate CL from the move to namespace vk to avoid possible rebase-time confusion with the file name change. Bug: angleproject:8564 Change-Id: Ibab79029834b88514d4466a7a4c076b1352bc450 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5370107 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Alexey Knyazev 490ff869 2024-03-14T00:00:00 Always redeclare clip/cull distance built-ins When clip or cull distance built-in arrays are implicitly sized, various pruning passes may produce an inconsistent AST state thus causing translation or linking failures. Adjusted the dedicated validation pass to inject an explicit declaration thus bypassing the issue. Additional updates: * Ensured that API clip distance state emulation is applied when a variable is declared but not assigned * Reverted previous clip/cull distance related changes to TIntermBinary::hasSideEffects as they are redundant now * Fixed failing AST validation for MSL varying emulation * Aligned linking error messages with the specifications * Updated tests and cleaned-up obsolete code Fixed: angleproject:8591 Change-Id: Ic8cfaf37778b8532bbab32ab998d5350b85d67ef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5372714 Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 58065d07 2024-03-14T16:00:20 Vulkan: Add test that destroys view after the image A depth/stencil blit path can create temp views. Temp objects are added to ContextVk::mCurrentGarbage, which is **appended** to the Renderer's garbage list. If the image from which the view was created is released before the next submission (i.e. it's appended to the garbage list before ContextVk::mCurrentGarbage), the image can be destroyed before its dependent view is. This is not triggering any validation error however, so there doesn't seem to be a need for a fix. For posterity, if this ordering needs to be fixed in the future, we can simply remove `ContextVk::mCurrentGarbage` and add garbage to the renderer directly. This was made possible a while back when the context was able to allocate its submission serial right away. (Previously, the serial had to be determined after submission, which is why temp objects were kept in ContextVk until that serial is known) Bug: chromium:40942995 Change-Id: I8a1270e635193dd7aff5b63cbf63c0c6a1fc061f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5370782 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 21ef298e 2024-03-13T11:06:22 Consider textures without an attached Buffer as incomplete There are apps that perform a draw call using GL_TEXTURE_BUFFER but without binding a valid buffer thus causing a crash. Instead consider them as incomplete textures and fail validation checks. Also, there is no need to explicitly track the buffer associated with an incomplete buffer texture, the owning texture will handle cleanup. Bug: b/328846669 Tests: TextureBufferTestES31.DrawIncomplete* Tests: TextureBufferTestES31.DrawComplete* Change-Id: Id0b68e8048ba582d677e6767272a86761913ea3a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5369639 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi 60aaf4a0 2024-03-14T12:58:56 Vulkan: Move renderer to namespace vk This class is agnostic of EGL. This change moves it to namespace vk for use with the OpenCL implementation Bug: angleproject:8564 Change-Id: I57f7807d6af8b3d5d7f8efbaf8b5d537a930f881 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5371324 Reviewed-by: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi b3ab67d3 2024-03-14T15:06:02 tests: Remove unnecessary .get() from RAII objects Bug: chromium:40942995 Change-Id: I82509869bce3ad8f51811188fe04267f2de04786 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5370904 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang e5cb7f1f 2024-03-12T16:06:37 Vulkan: Fix access to inactive attributes ... within range of active ones. Since a buffer is bound for inactive attributes, it must be considered accessed. Ultimately, the nullDescriptor feature could be used to avoid binding a buffer for inactive attributes. Bug: chromium:327807820 Change-Id: Ieceea9442310c23568c47cef7357b4094b7ebbb4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5369336 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen 90ae6cbe 2024-03-07T15:51:41 Avoid assert at main prototype when monomorphizing Use the same condition as for main function definition. Bug: angleproject:8594 Change-Id: I66e4af61015607660437745042976fdc577308ca Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5352247 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Charlie Lao 46672014 2024-03-07T09:55:38 Vulkan: Add test for midRenderPass clear for MSRTT This adds a test that demonstrate the bug with mid render pass clear of depth buffer with multisample render to texture emulation code path. This bug was seen in lord_of_heros. Bug: b/309355117 Change-Id: I0217baf77f74372b8d24e3321b9a0b727a6690ca Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5353371 Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 74af31ad 2024-02-28T00:00:00 GL: Add ClearsWithGapsNeedFlush workaround Enabled on older Adreno drivers to avoid clear/draw race conditions in certain cases. Fixed: angleproject:8374 Change-Id: Ifc30f66ece562027ae4dd7672fcb121f91ec4696 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5335662 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Mohan Maiya 91ddf851 2024-03-03T10:57:22 Vulkan: support QCOM foveated rendering extensions Add support for foveated rendering in the vulkan backend. This is done by leveraging the VK_KHR_fragment_shading_rate extension. Bug: angleproject:8484 Change-Id: I0d01d07583f710b2302ea07b19c9d113c73bfe41 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5269907 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya b2773c11 2024-03-01T11:24:44 Vulkan: Bug fix in immutable sampler pipeline layout recreation An immutable sampler is tied to a sampler index and changing sampler uniform location value should force a recreation of the pipeline layout Bug: b/155487768 Bug: angleproject:5033 Bug: angleproject:5773 Tests: Texture2DTestES3.TexStorage2DMultipleYuvSamplersSwitch*Vulkan Change-Id: I82aaed332d7f87f11a2fd4923cfc004403ff0bd2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3657480 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com>
Kimmo Kinnunen 27423bff 2024-03-05T17:57:24 Metal: Generate names for rewritten inputs When expanding multi-component fields to multiple single-component fields, use AngleInternal namespace for the new names. The names are generated with form "someField_0" where _0 is the component index. If these are not created in AngleInternal, caller is able to create a name clash by introducing single-component field "someField_0". Fixes an assert where the vec4(a_) + vec4(a) would assert on size mismatch because the variable lookup for "a_" would find a rewritten variable for the expanded matrix row of "a". Bug: angleproject:8558 Change-Id: I64b7a755d7d534543fdb0f4c43008dd5c63f4aad Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5323060 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com>
Mohan Maiya b978974d 2024-03-03T10:48:48 Update frontend support for QCOM foveated extensions Modifications to frontend support - 1. EXTENDED_DIRTY_BIT_FOVEATED_RENDERING is removed 2. New framebuffer attachment API - getFoveationState 3. Attachment type restriction for foveated rendering is removed 4. Addition of new test - RenderbufferAttachmentClearThenDraw Bug: angleproject:8484 Change-Id: I699cbed81346c9a6344c4ff36afa51d6cc1bf052 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5338529 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 2ee295b4 2024-02-15T11:27:39 Vulkan: Add per-level image update tracker * Add a per-level image write tracker to ImageHelper. * It tracks the updates scheduled for different parts of the image. Within each level, it also tracks different layers, currently up to 64. * kMaxParallelSubresourceUpload renamed to kMaxParallelLayerWrites; moved to vk_helper header. * It is reset when a barrier is issued for the image. * Modified ImageHelper::recordWriteBarrier(). * Added isWriteBarrierNecessary(). * Now it checks the added writes for the image. It will no longer issue a barrier if the image is in the same layout and there is no write to a part of the image to which was previously written. * Added ReadImageSubresources to CommandBufferAccess. * It is used for layouts that allow both reading and writing to the image (including self-copy): * TransferSrcDst (used in CopyImageSubData) * ComputeShaderWrite (used in compute-based mipmap generation) * CommandBufferImageWrite -> CommandBufferImageSubresourceAccess * Updated onImageSelfCopy() args to include read subresource data. * Improves gpu_time for TextureUploadETC2TranscodingBenchmark perf test * Windows/NVIDIA: ~180609 ns -> ~62669 ns (~2.88x) * Linux/NVIDIA: ~157283 ns -> ~93360 ns (~1.68x) * Windows/Intel: ~72297 ns -> ~57153 ns (~1.27x) * Added a test to show that self-copy for a write-after-read works. * ArraySelfCopyImageSubDataWithWriteAfterRead * (ArraySelfCopyImageSubData covers RAW hazards; renamed) Bug: b/308455694 Change-Id: I5cef296d991ce6ec02792edc3ffc5cc4994831e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5301855 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Mohan Maiya a971e5b4 2024-02-28T17:13:38 Account for zero vector axes in Mat4::Rotate(...) When the axis passed in to the Rotate function is (0, 0, 0), normalizing that vector will result in NaN values. Prevent this by returning an identity matrix and early out instead. Bug: angleproject:2306 Tests: MatrixBuiltinsTest.RotateAxisZero Change-Id: I65fd0b9944885daf56a4a35201d424e7f0aa9ba6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5333834 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 75c8ef1c 2024-02-22T00:00:00 Update cached component type masks on attachment redefinitions Added a new test: WebGL2ValidationStateChangeTest.AttachmentTypeRedefinition Fixed: angleproject:8556 Change-Id: I1535fba5467228076bb79ac2cc5530610d4ec747 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5318735 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Gregg Tavares 0afcac60 2024-02-22T11:21:15 Handle count = 0 in DrawElementsIndirect Bug: angleproject:8554 Change-Id: I9618061edf71c3d9a03ea14dfe65b54c58ee98de Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5319131 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Amirali Abdolrashidi 3c517e45 2024-02-14T14:26:42 Vulkan: Process ClearEmulatedChannels update first * When going through the level updates in flushStagedUpdates(), the ClearEmulatedChannels updates are expected to be before the rest. In addition, there can be only one such update in the level update list. Therefore, now they are processed and applied before the rest of the updates. By doing so, if this is the only update for the image, an unnecessary layout transition can be avoided. * Added flushStagedClearEmulatedChannelsUpdates(). * Added flushStagedUpdatesImpl() for the rest of the update types. * Used clipLevelToUpdateListUpperLimit() to limit the flush loops to the number of levels in subresource update list. * Added unit test to ensure updates after ClearEmulatedChannels are not ignored. * ImageTestES3.IncompleteRGBXAHBImportThenUploadThenEnd * The test contains a ClearEmulatedChannels followed by an image update. If the latter is ignored in this test, there is a failure during teardown due to orphanNonEmptyBufferBlock when destroying the buffer that contains the update. Bug: b/308455694 Change-Id: I53c73acb60a9c5440548886cde913112a664402d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5297317 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Dan Glastonbury 5a4bfd61 2024-01-12T17:15:39 Metal: Separate struct definition from function return The EmitMetal pass in shader translator does not handle writing the defintion of a structure that is declared in the return type of a function, such as: struct Foo { float val; } foo() { ... } This change adds a new pass, SeparateStructFromFunctionDeclarations, to separate the definition and declaration of struct variables in function prototypes into two statements, such as: struct Foo { float val; } foo(); struct Bar { int val; } bar() { ... } void main() { ... } Foo foo() { ... } into: struct Foo { float val; }; Foo foo(); struct Bar { int val; }; Bar bar() { ... } void main() { ... } Foo foo() { ... } Fixed: angleproject:8302 Change-Id: Id8b6ba256d3c8375dd889facd70e4715261c1ca3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5191644 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mark Lobodzinski f546983c 2024-01-30T13:39:27 Add test and skip for 07753 validation error Running Pokemon Masters Ex game on Android generates the validation error VUID-vkCmdDrawIndexed-format-07753. This CL adds the TexImageFormatMismatch test to reproduce the error and updates the SkippedMessages list to avoid test failures. Test: angle_end2end_tests --gtest_filter=*TexImageFormatMismatch* Bug: b/319228278 Change-Id: I6ee2cac0bc899e945ef0d4aff33d5e73299c6954 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5309857 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Shahbaz Youssefi 8346addb 2024-02-06T15:40:31 Contain X11 includes and free usage of common terms This change undoes workarounds where some terms were avoided so there is no clash with X11 (such as Success, Bool and None). In particular, this helps us make sure we never include the X11 headers in such an unconstrained manner as to clash with our code. Bug: angleproject:8520 Change-Id: I53d9657c5a33164064d2c80a206b96fd52f607f1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5273491 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Liza Burakova <liza@chromium.org>
Geoff Lang b7bacdb7 2024-02-15T11:14:21 GL: Generate mipmaps through draw calls on Pixel7/Pixel8. Some patterns that use a texture as a framebuffer attachment and then generate mipmaps on that texture multiple times cause context loss or driver hangs. Extend the sRGB mipmap generation to also generate mipmaps on non-SRGB textures using draw calls and linear samplers to do the downsampling. Bug: chromium:40279678 Change-Id: I19c6bf9c702ddf2c400ef03ff076fbd4cf15d285 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5297413 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Liza Burakova f4d5644c 2024-02-16T18:13:18 Instantiate dawn backend in angle_end2end_tests Bug: angleproject:8485 Change-Id: I07a5c5c221c6b50b839929a824753a662aa163f5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5286835 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Liza Burakova <liza@chromium.org>
Mohan Maiya 6607a2b9 2024-01-17T15:58:20 Vulkan: Add support for VK_EXT_vertex_input_dynamic_state Hook into VK_EXT_vertex_input_dynamic_state so pipeline states that differ only in vertex input state can reuse existing pipelines. Bug: angleproject:7162 Tests: StateChangeTestES3.Vertex* Change-Id: Icd3134dee93fc5fc2e9d284fcfa8c674b62faec8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5207462 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 40dfb3a8 2024-02-12T00:00:00 Fix length() translation for clip/cull distance arrays * Fixed a failing assertion when the arrays are resized. * Added a compile error for length() when the arrays are unsized. Fixed: angleproject:8527 Change-Id: I6379336c546b008095f0875e5b5b4e8e0e5ba3e6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5293914 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Kimmo Kinnunen d6ceac91 2024-02-12T20:37:58 Metal: Add support for binding slices to images Add support for binding Metal MTLTextureType2DArray texture slices to EGL images. Bug: angleproject:8531 Change-Id: I938e75c81bf36d3885f3bdcb0d1007e1f87e20c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5290374 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Shahbaz Youssefi 195c142d 2024-02-14T15:09:54 GLSL test for side effects in prune-able loop Bug: angleproject:8532 Change-Id: Ie872e957b78454d725575b05721f9b3f213889f6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5297407 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Kimmo Kinnunen b8e56d5d 2023-11-20T15:41:44 Fix an assert when overwriting TexImage binding Fix an assert when overwriting a image binding with multiple eglBindTexImage calls on the same texture. Bug: angleproject:8521 Change-Id: Ie7247017fd73c523b889278ec19a09ecf0683692 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5272912 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev cb7d3cc2 2024-02-09T00:00:00 Treat clip/cull distance built-ins as having side effects The sizes of these built-in arrays may be affected by indexing them with constant integral expressions so such operations should not be optimized out. Fixed related failures during MSL and HLSL translation. Fixed: angleproject:8525 Change-Id: I8460aa03b997ebc4142ee2d9f81eeefe13661336 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5285436 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Saifuddin Hitawala 275e6f4f 2024-02-02T16:46:14 D3D: Add multiplanar support to d3d11 glTexSubImage2D Add multiplanar format support to Angle's D3D11 glTexSubImage2D. This is needed with multiplanar shared images, where we write all planes of a d3d shared image through WritePixelsYUV in raster decoder and need to do this via an intermediate texture for d3d11. This change checks for multiplanar format supported by Image11 and then goes through TextureD3D::commitRegion and performs copyTexture and then copySubResource. Added necessary test that tests for full texture copy and a subregion copy and reads back and verifies. Bug: chromium:40262482 Change-Id: I74c9978e62339375f6623f7f0a609bcb16c4b970 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5263039 Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Saifuddin Hitawala <hitawala@chromium.org>
Geoff Lang e489dac0 2024-02-02T13:52:47 Allow BGRA -> RGBA for glCopyTex[Sub]Image The opposite RGBA->BGRA was already allowed for handling platform- specific default framebuffers. This allows the copying a IOSurface- backed framebuffers to RGBA textures. Bug: chromium:1523778 Change-Id: I124a4acc8c8fcdd1d3aae861d756d17022c4b4cc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5254778 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya d05c9a5e 2024-01-25T13:01:49 Frontend support for QCOM foveated extensions Add frontend state management to support foveated rendering extensions. Bug: angleproject:8484 Test: Texture2D*Foveation* Change-Id: I0e1be9f11b2d442207674562da760f5bfd7debc8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5208091 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi c70c329e 2024-01-31T15:59:19 Vulkan: Fix texture copy vs pre-rotation A minor error where the destination offsets were swapped based on source rotation. Bug: b/319336510 Change-Id: I5541f8d0bf0b7306b951d2601c8c27ffedb8470e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5254238 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya ab4aed3f 2024-01-29T10:59:58 Bugfix in PixelLocalStorageTest Add GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST to following tests - - PixelLocalStorageValidationTest - PixelLocalStorageCompilerTest - PixelLocalStorageTestPreES3 Bug: angleproject:7279 Change-Id: Ibd2e682be195fddff1cf638e37d12bcc740cf3a4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5243831 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi 0c4d6446 2024-01-24T10:38:45 Rework uniform block <-> uniform buffer mapping In GLES, the shader declares which buffer binding a block (uniform, storage or atomic counter) is bound to. For example: layout(binding = 1) uniform ubo0 { ... }; layout(binding = 2) uniform ubo1 { ... }; layout(binding = 1) uniform ubo2 { ... }; In the above, ubo0 and ubo2 use data from the buffer bound to index 2 (through glBindBufferRange), while ubo1 uses data from the buffer bound to index 1. For uniform blocks in particular, omitting the binding is allowed, in which case it is implicitly bound to buffer 0. GLES allows uniform blocks (and only uniform blocks) to remap their bindings through calls to glUniformBlockBinding. This means that the mapping of uniform blocks in the program (ubo0, ubo1, ubo2) to the buffer bindings is not constant. For storage blocks and atomic counter buffers, this binding _is_ constant and is determined at link time. At link time, the mapping of blocks to buffers is determined based on values specified in the shaders. This info is stored was stored in gl::InterfaceBlock::binding (for UBOs and SSBOs), and gl::AtomicCounterBuffer::binding. For clarity, this change renames these members to ...::inShaderBinding. When glUniformBlockBinding is called, the mapping is updated. Prior to this change, gl::InterfaceBlock::binding was directly updated, trumping the mapping determined at link time. A bug here was that after a call to glProgramBinary, GL expects the mappings to reset to their original link-time values, but instead ANGLE restored the mappings to what was configured at the time the binary was retrieved. This change tracks the uniform block -> buffer binding mapping separately from the link results so that the original values can be restored during glProgramBinary. In the process, the support data structures for tracking this mapping are moved to ProgramExecutable and the algorithms are simplified. Program Pipeline Objects maintain this mapping identically to Programs and no longer require a special and more costly path when a buffer state changes. This change prepares for but does not yet fix the more fundamental bug that the dirty bits are tracked in the program executable instead of the context state, which makes changes not propagate to all contexts correctly. Bug: angleproject:8493 Change-Id: Ib0999f49be24db06ebe9a4917d06b90af899611e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5235883 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 3fdf576a 2024-01-26T14:37:42 Vulkan: Workaround Nvidia driver bug with OpSelect Bug: angleproject:8503 Change-Id: I4bd2580056df3d970a1316d0dbeaaad7590aa947 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5237873 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 0ea24ef2 2024-01-26T16:50:39 Unsuppress passing tests Bug: angleproject:3871 Bug: angleproject:3872 Bug: angleproject:3879 Bug: angleproject:4686 Bug: angleproject:4704 Bug: angleproject:4718 Bug: angleproject:4721 Bug: angleproject:4792 Bug: angleproject:5086 Bug: angleproject:5313 Bug: angleproject:6109 Change-Id: I0d0f88a388cd2f19da99a7defd0ab8d98db0e6e0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5241306 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang f405b999 2024-01-19T11:18:49 Make RefCountObject use atomics for the reference count When the context share lock is disabled it is possible for races with EGL Image reference counting causing the EGL Image to be deleted. egl::Image already protects its members with a mutex but the siblings also hold a reference to the egl::Image, if siblings are added and removed at the same time, writing to the ref count races and the egl::Image can be deleted while still being referenced. Bug: angleproject:6957 Change-Id: I3da8691136b6dbcffb2094187c81cafda077e50d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5214270 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 66de8492 2024-01-23T12:56:30 GL: Fix UBO binding mapping change In the absence of any other state change, the GL backend did not bind buffers (previously unused) that are used after a UBO binding mapping change. This also triggered assertion errors in the Vulkan backend. Additionally, this change improves cross-context programs, though the Vulkan backend is still affected by some bugs. A follow up change will rework the dirty bits for this change to fix that. Bug: angleproject:8493 Bug: b/318806125 Change-Id: I8f0ed4b5f666818f4fda9ec272c6b66419d64638 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5228599 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi f794c9c2 2024-01-22T09:56:08 Tests for out-of-bounds LOD in texelFetch Bug: chromium:1504556 Change-Id: I3a92da00d9a8781122c7218f22a681839783dc7e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5225080 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 341906d5 2024-01-22T10:19:25 Vulkan: Never delay device and queue selection Previously, when multiple queue families where eligible, ANGLE delayed the decision on which queue family to use and delayed device creation until a window surface was created. This assumption was never correct. The application may start rendering to pbuffers or using EGL_KHR_surfaceless_context long before it creates a window surface. So a queue may need to be chosen regardless of its surface present capabilities. Once done, ANGLE has no mechanism to change that queue should a window surface require a different queue. This change drops the pretense to support multiple queue families properly and makes ANGLE always choose the first graphics queue family it encounters. So far, only MoltenVk seems to expose multiple graphics queue families, and choosing the first one ultimately correct for the purposes of presenting to a MacOS surface. Bug: angleproject:8478 Change-Id: I8efbfe0c8036be5f9cee01eb657f83f85a4864fd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5225081 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi c6fbf93d 2024-01-19T09:57:12 Vulkan: Fix input attachments leaking into uniform list To communicate the existence of input attachments added to the shader, the translator was adding `ShaderVariable`s for each to the list of uniforms exported from the shader. This was incorrect, as this list is visible to the application through `glGetActiveUniform`. Additionally, this was unnecessarily causing these uniforms to go through program link. Reserving SPIR-V ids for these uniforms, all that is needed from the translator is the mere existence of these input attachments. This change removes the addition of uniforms, and instead exports a bitset. Elsewhere, that bitset is consulted and reserved SPIR-V ids are used. Bug: b/320563594 Bug: angleproject:5792 Change-Id: Id93846cbc3996248f391fd2d5a65af1e48d6d46e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5215089 Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi fad2adb2 2024-01-12T14:43:33 Vulkan: Fix importing external object and using as storage image The create flags used to create the imported object was 0. Later, when the texture was used as a storage image, TextureVk::syncState would recreate the image (losing connection to external object). This change makes sure the create flags include all the necessary create flags such that the texture can be correctly used as storage image. Bug: angleproject:8464 Change-Id: I6587b53b1c2819a11dec8f2d5a3a30c889a4c63f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5194064 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi ed2a8ef8 2023-12-20T00:06:10 Vulkan: Defer QFOT when acquiring texture with GL_NONE layout Instead of issuing a queue family ownership transfer with the UNDEFINED layout (and then hack its dst layout to be GENERAL), this change simply lets the queue family be changed when the image is next accessed (at which point a layout transition is necessary anyway). Bug: angleproject:8464 Change-Id: Iab36af0c641bd04029bdc0d9097e766e8a0f4145 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5138657 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Mohan Maiya 073b6510 2024-01-11T07:40:32 Add missing GLES1 glGetBooleanv() enums In OpenGL ES 1, capabilities that can be queried using glIsEnabled() can also be queried using glGetBooleanv(). As such, some valid glGetBooleanv() calls were returning "Invalid pname" error. Added support for the missing enums in glGetBooleanv(). Bug: angleproject:8481 Tests: GLES1 - QueryTest* Change-Id: Ic3a50eda4eae5855cd9491dbf217b5f69c1669b4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5188456 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 950d054a 2024-01-11T00:00:00 Metal: Do not defer global const initializers Since MSL supports constant global variables, they should not be included in the DeferGlobalInitializers operation. This reduces temporary register usage and thus makes shaders that use large const arrays more compatible with Apple GPUs. Fixed: angleproject:8479 Change-Id: If1cd17a0a194173e60e6b5152297054fc384c0b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5189165 Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Mohan Maiya f1fee64d 2024-01-10T13:35:53 Bugfix in MultithreadedAHBImport tests Depending on thread scheduling it is possible that thread0 moves beyond Step::Start before thread1 waits for it. This causes a FATAL error with log - FATAL: MultiThreadSteps.h:73 (waitForStep): \ waitForStep requires increasing order. mCurrentStep=1, waitStep=0 Fix this by making thread1 wait on Step::Thread0Created* Bug: b/261552549 Change-Id: I8e7c9ed554285fea5674263c5807db67b908a725 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5186836 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi e00995d4 2023-12-21T15:57:39 Vulkan: Invalidate pipeline with FBO draw buffer change Enabling/disabling draw buffers can affect the graphics pipeline without changing the render pass description. In that case, the graphics pipeline was not being invalidated. Bug: angleproject:8463 Change-Id: I6848472dcbb3d3ce4c34d95be28c8ec3fc50dcd7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5147847 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: mohan maiya <m.maiya@samsung.com>
Amirali Abdolrashidi 82c0ba93 2023-12-21T16:18:40 Set dirty bit when GLES1 texture state changes During experiments, it was seen that some devices fail to use the tex coord pointer properly after GL_TEXTURE_2D is re-enabled and there is a draw without updating any additional attribute pointers. * The GLES1 renderer will now also set the dirty bit for the vertex array when GL_TEXTURE_2D state changes. * (via setEnableVertexAttribArray()) * Updated the following test: DrawWithTexCoordPtrThenDisableTexture2DAndDrawAnother * Updated so after GL_TEXTURE_2D is enabled, we draw without updating the vertex pointer to check that simply enabling textures is enough to use the texture data. Bug: b/310688730 Change-Id: I0d93bd6fae3d07ea86cf0e5e094ce7a29f2e5f1e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5147197 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Mark Lobodzinski d18f22ca 2023-12-14T11:50:19 ANGLE: Update syncval exceptions and add test for syncval errors Trace testing found some new cases where the current sync val error messages needed to be widened to cover more cases. A test was added to reproduce the behavior seen in the Asphalt 9 ANGLE trace. Test: FramebufferTest.InvalidateAttachmentStencilOnly Bug: b/316337308 Change-Id: Icde7ad560e6949712bfd785d9969b9e179d11492 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5124314 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Hailin Zhang 536042b6 2023-12-20T12:26:00 vulkan: fix etc2 srgb8_alpha8 alpha decode issue. for etc2_srgb8_alpha8 format, we should not use signed alpha decoder. Bug: b/314875175 Change-Id: I89f7eaf71e31f279da08c83989f8d692a8ba2c81 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5142566 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Hailin Zhang <hailinzhang@google.com>
Shahbaz Youssefi a1143857 2023-12-18T15:24:42 Fix UBO dirty bits vs PPOs This change fixes propagation of UBO dirty bits (such as through glUniformBlockBinding and glBindBufferRange) to program pipeline objects. Since PPOs concatenate the attached programs' UBOs in a list, a map of program UBO indices to PPO UBO indices is introduced to offset these dirty bits appropriately. Additionally, when the program's executable's buffer bindings change (through glUniformBlockBinding), a notification is send to the PPO to update its executable's buffer binding accordingly (which is otherwise only updated during PPO link). Bug: angleproject:8462 Change-Id: I4965ae23e6fc6cac0842e1643755e42e95d3d5cc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5131418 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi c51259ec 2023-12-14T15:58:56 Vulkan: Ignore tex coord at draw if tex disabled In GLES1, it is possible to disable texture rendering in some cases. It is done using glDisable(GL_TEXTURE_2D). In that case, if TexCoordPointer has been enabled in the client state prior to disabling the texture, its data should no longer be used, especially if the primitive changes to use more vertices. In that case, there is a risk of unauthorized memory access. In this CL, the active vertex attributes are updated accordingly if texture is disabled using the aforementioned API call. * Updated GLES1 renderer to ignore TexCoordPointer if texture has been disabled. * Added GLES1 tests for tex coord pointer, including tests to make sure that tex coord pointer is no longer used if the texture is disabled using glDisable(), and that it is used again when texture is enabled using glEnable(). * To ensure that tex coord pointer is not used, the test draws using enough vertex data that would exceed the texcoord array size, which can trigger segfault if accessed. Bug: b/310688730 Change-Id: I5d259c83a172cc1a11733c0b42c2f9b02c9b2967 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5124259 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 0aaa8de9 2023-12-19T23:23:40 Vulkan: Fix memory tracking vs external texture acquire ... with a layout of GL_NONE. Bug: angleproject:8464 Change-Id: I94690c5693c5bcb6d510e4a27097206f0da58a41 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5138656 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi e9c0241d 2023-12-19T10:23:13 Vulkan: Rely on Vulkan 1.1 entry points in tests Some KHR entry points that were promoted to Vulkan 1.1 no longer seem to be loadable with their KHR symbols. Bug: angleproject:8464 Change-Id: Id5417e5b047e6bd34d144fead518f771c17658e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5135676 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 4bf40237 2023-12-18T15:24:15 GL: Fix missing glUniformBlockBinding handling When a program is current and this call is made, the program is made dirty so that the GL backend reacts to this call. Prior to https://chromium-review.googlesource.com/c/angle/angle/+/4922969, the program was made dirty when its executable was installed as well (if it had any UBOs dirty), but that change removed it. As a result, if this call was made while the program was _not_ current, the GL backend would miss processing it. This call ensures that the appropriate dirty bit is set when the program is made current again. This revealed a bug in the Vulkan backend where sometimes the executable's dirty bits would not get reset. This was benign but fired an assertion, and is fixed in this CL as well. Bug: chromium:1511506 Change-Id: Iae86ba0aa5b8f9e4f20dd6df6002d37e405280e7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5123005 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Stephen White a950f005 2023-12-06T18:58:35 Move compressed format validation to Vk backend. Add test to call glCompressedTexSubImage3D() from a pixel unpack buffer. This currently fails on OpenGL. Bug: angleproject:8449 Change-Id: I863b602e39a14878af8745ff62b408bdd879bc98 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5100348 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Stephen White <senorblanco@chromium.org>
Shahbaz Youssefi 18a68f6d 2023-12-07T16:23:10 Fix vertex attribute limit check Bug: angleproject:8448 Change-Id: Ie5d2b71f0be86b31ec74a1d55501b60a25245668 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5101508 Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 8f966559 2023-12-07T00:00:00 Metal: Fix matrix vertex attributes with mixed sources Updated VertexArrayMtl::setupDraw to support matrix vertex attributes that use current and array values simultaneously. Simplified the helper function. Fixed: angleproject:8456 Change-Id: I09a26a978cda4b9ac3747325ad571d5ad2fff72d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5116500 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org>
Geoff Lang f8fae1ff 2023-12-08T13:20:36 Validate Uniform variable limits with each iteration VariablePacker would loop over all variables and sum up the total row counts before validating. Each variable can take hundreds of rows so it is possible to overflow the counters before validating them. Validate the limits with each iteration and early-out when the limits are exceeded. https://bugzilla.mozilla.org/show_bug.cgi?id=1864587 Bug: chromium:1864587 Change-Id: Ic235ada1516a0d5a9948d82b22f6316a037c09ca Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5106408 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 5c8cb8a6 2023-12-07T00:00:00 Update WebGLReadOutsideFramebufferTest tests Enabled robust resource init for these tests as they access out-of-bounds values. This flag is required to pass some of the tests on Vulkan backend. WebGL clients always set it. Fixed subresource index computation on D3D11 to pass CopyTexSubImage3D with 3D textures there. Added a similar test for 2D array textures. Bug: angleproject:4092 Fixed: angleproject:4136 Change-Id: I191c6df3c672e583568aadecac5885da015cfa8b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5106511 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev bc301691 2023-12-07T00:00:00 Run PackUnpackTest on all backends Fixed negative zero serialization for capture/replay. Bug: angleproject:4092 Change-Id: Ic12a556f56e40064da8bf3a8ce7d01af92c7086a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5106509 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev ede15b85 2023-12-07T00:00:00 Metal: Run multi draw tests Added ANGLE_INSTANTIATE_TEST_COMBINE_3. Used the new macro for multi draw and BVBI tests. Bug: angleproject:6963 Change-Id: If05800f92f670bf21b7ff889a2fb8bb30f62a488 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5106508 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao d0eb968d 2023-12-08T16:11:46 Vulkan: Fix the AHB leak for AHB backed buffer object For client buffer backed OpenGL buffer object, we call InitAndroidExternalMemory which calls AHB acquire. But when buffer object is released/destroyed, we never call ReleaseAndroidExternalMemory, which end up leaking AHB. Bug: b/314791770 Change-Id: I693c74213e73008497a6dfeca93ea62e84c71352 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5106599 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Charlie Lao <cclao@google.com>
Alexey Knyazev 0b0b4b22 2023-12-07T00:00:00 Avoid UB in VertexAttributeTestES3.DrawWithUnalignedData The test uses a signed normalized vertex attribute, which requires a floating point vertex input. Bug: angleproject:7001 Fixed: angleproject:7068 Change-Id: I97afc97b03a58130e0d6ee63ec7ee3e44f1e0230 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5105194 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi b8ca8de4 2023-12-05T13:36:53 Vulkan: Don't crash when glCopyTexImage2D redefines itself The Vulkan backend marks a level being redefined as such before doing the copy. If a single-level texture was being redefined, it releases it so it can be immediately reallocated. If the source of the copy is the same texture, this causes a crash. This can be properly supported by using a temp image to do the copy, but that is not implemented in this change. Bug: chromium:1501798 Change-Id: I9dde99aa0b88bc7d5f582ff15772f70b36f424e0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5089150 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi dc4b1acd 2023-11-30T15:42:32 Translator: Limit private variable size to 64KB This is indirectly fixing an issue where passing large arrays in SPIR-V such that an internal cast is needed (such as array inside interface block copied to local varaible) causes an overflow of the instruction length limit (in the absence of OpCopyLogical). By limiting the size of private variables to 32KB, this limitation is indirectly enforced. It was observed that all the test shaders added in this CL fail on the Nvidia OpenGL drivers, so such a limit seems to be reasonble. Bug: chromium:1505009 Change-Id: Ia36134b2bf8501a5b875814db3566be28b183e0f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5077408 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev d7077e9f 2023-12-05T00:00:00 Update macOS end2end expectations Bug: angleproject:2273 Bug: angleproject:2408 Bug: angleproject:3837 Bug: angleproject:5325 Bug: angleproject:5360 Bug: angleproject:5594 Bug: angleproject:6358 Bug: angleproject:6418 Bug: angleproject:6454 Bug: angleproject:6457 Bug: angleproject:6540 Bug: angleproject:6702 Bug: angleproject:6751 Bug: angleproject:7068 Bug: angleproject:7309 Bug: angleproject:7445 Change-Id: I7f4c012ed2de6af83188ed69170b19f8d2bb19de Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5087774 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi fb6b960c 2023-11-27T14:24:28 Remove GL_CHROMIUM_texture_filtering_hint This was using an unregistered Vulkan extension to set the precision of SwiftShader's internal filtering for the sake of Chrome. That's baked in at build instead. Bug: angleproject:8349 Bug: chromium:726075 Change-Id: I12849d2d29d99626f22a92ee9d74366f78658476 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5063344 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Charlie Lao 90767546 2023-12-01T12:27:15 Vulkan: Add test for __samplerExternal2DY2YEXT then swizzle Added a correctness test SourceYUVTextureTargetExternalRGBSampleYUVSampleWithSwizzle for applying swizzle after sampler. Also removed some bug workaround for VVL and drivers since they are fixed now. Bug: b/309480316 Change-Id: If82b2251745a96335b535c67b6e0c0847268b25b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5080497 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi caa5e4ea 2023-11-30T14:12:42 Translator: Fail compilation if too many struct fields If there are too many struct fields, SPIR-V cannot be produced (as it has a hard limit of 16383 fields). The Nvidia GL driver has also been observed to fail when there are too many fields. Bug: chromium:1505009 Change-Id: If9b01716c1cab35a6e537da64421e29fe0eda91e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5074629 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com>
Shahbaz Youssefi 6df603ed 2023-11-30T13:53:00 Translator: Optimize field-name-collision check As each field of the struct was encountered, its name was linearly checked against previously added fields. That's O(n^2). The name collision check is now moved to when the struct is completely defined, and is done with an unordered_map. Bug: chromium:1505009 Change-Id: If28d738254a541450912eba4ed168424dad9d8be Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5077407 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com>
Sergey Kataev 75e13e68 2023-11-29T22:19:46 Metal should not inline non-const global initialisers Bug: angleproject:8403 Change-Id: Iaa6126d7043931a16104ea84c5f7e737017dabc3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5076256 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Sergey Kataev <sergeyka@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Sergey Kataev 058a2fd6 2023-11-28T17:38:28 Clear active queries before Begin Bug: angleproject:8415 Change-Id: I97dfd904d65933a66f25cd168c50fe150ef9c765 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5068525 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Sergey Kataev <sergeyka@chromium.org>
Steven Noonan 99b077b7 2023-11-26T08:24:18 Vulkan: fix data clobbering with AllocateNonZeroMemory The offset of the suballocation was not being used when initializing memory, so it was possible to overwrite the start of an existing buffer with garbage. Bug: angleproject:8427 Change-Id: I8205068a173dc4342894c6c49ee5fa9c4a8a255a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5060776 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Steven Noonan <steven@uplinklabs.net>
Mohan Maiya 8ae36a93 2023-11-14T10:11:51 Vulkan: Bugfix in isFastUnpackPossible Disallow fast unpack when there is a mismatch between the actual texture format and intended buffer (PBO or client buffer) format. Bug: angleproject:3777 Test: Texture2DTestES3.UnpackCompatibleFormatButDifferentType* Change-Id: I9ea9d9cdd5e1391acebb3d75d69437e27cfa90df Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5029504 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi 64eb87af 2021-05-12T00:02:22 Add test for VectorizeVectorScalarArithmetic bug Bug: chromium:1201084 Change-Id: Icfb659ae5195f8dd80fecd0904cb90b77697fa70 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2889601 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Roman Lavrov <romanl@google.com>
Shahbaz Youssefi 3a6b385f 2023-11-09T15:48:48 Vulkan: Fix depth/stencil texture copy Bug: angleproject:7289 Change-Id: Icde8a26e855e95a6c0a1e506d2435e981adc6f28 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5018798 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi d896fab8 2023-11-09T15:03:05 Vulkan: Fix texture self-copy A new layout is introduced to support self-copy. Bug: angleproject:7289 Change-Id: Ib914c433d55b9a79cfeb7a91f8a2b8680824d473 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5018797 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Geoff Lang 2155534b 2023-11-06T11:49:20 Don't set dirty bits for attribs that are out of range. PrivateState::setAllDirtyBits sets all bits in mDirtyCurrentValues. When the context has fewer max attibutes than MAX_VERTEX_ATTRIBS, this can cause out-of-bounds access to PrivateState::mVertexAttribCurrentValues if the dirty bits are iterated over without range validation. Bug: chromium:1496378 Change-Id: I65481c432263a6e353a9361bba741b97dc5e20b1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5008034 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Le Hoang Quyen 383df961 2023-11-06T22:00:52 Metal: only convert vertex if offset is not multiple of 4. Previously we always convert vertex attribute if its binding offset is not multiple of the attribute's size. This requirement seems to be unnecessary. This CL removes that requirement so the only requirement left for offset is that it must be multiple of 4. Bug: chromium:1496807 Change-Id: I35c421951c7817b77bd0c006ed4b72cd04b5a8d7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5006359 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Dan Glastonbury 34e5620b 2023-11-01T17:52:34 Metal: Reuse UBO conversion buffer only if size matches BufferMtl::getUniformConversionBuffer will recycle an existing buffer if the request has the same buffer index and offset that is a multiple of existing block size. This disregards the GL std size of the request leading to incorrect allocation of blocks in the conversion buffer. The fix is to create a new conversion buffer when stdSize != buffer.uniformBufferBlockSize. Bug: angleproject:8393 Change-Id: Ife87309e66f65baa7f636b734a5586d0ae3b9768 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4995450 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org>