src/libANGLE


Log

Author Commit Date CI Message
Shahbaz Youssefi d193d51b 2024-06-17T22:46:08 Replace issue ids post migration to new issue tracker This change replaces anglebug.com/NNNN links. Bug: None Change-Id: I8ac3aec8d2a8a844b3d7b99fc0a6b2be8da31761 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5637912 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 6ac37446 2024-06-17T15:38:09 Vulkan: Add feature for VK_KHR_maintenance5 This extension expands the pipeline flag bits, one of which is needed for VK_EXT_legacy_dithering v2 for dynamic rendering. Bug: angleproject:42267038 Change-Id: I45f2c47fbd016f60c3e52fda80d148d9f147bd71 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5637154 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 5703bd61 2024-06-14T14:12:41 Vulkan: Further optimize ProgramExecutableVk::resetLayout 1. Handle compute pipelines similar to how we handle graphics pipelines 2. Track valid compute pipeline permutations Bug: angleproject:8297 Change-Id: I58200517e5a44a2b3092777ea24d1529ceee00f5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5634574 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi d0744916 2024-05-07T12:52:53 Vulkan: Smaller PackedDescriptorSetBinding Bug: angleproject:8677 Change-Id: Id7bcef8de129514446384a019b6cce95da13b028 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5522755 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: mohan maiya <m.maiya@samsung.com> Commit-Queue: Charlie Lao <cclao@google.com>
Alexey Knyazev d521dd08 2024-06-13T00:00:00 Metal: Set write dependency when calling fillBuffer Ensured that resetting the visibility buffer completes before next operations. Fixed: angleproject:347193640 Change-Id: Ib44322ca36c056a71a828e45cea435f51394cc0a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5632318 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Geoff Lang 2d8e15f8 2024-05-31T14:25:12 Add stubs for GL_QCOM_tiled_rendering Bug: angleproject:343900918 Change-Id: I77d742949565ebfecb5f4446db3510af4f94033c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5588629 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang 60e8ea7e 2024-06-14T10:27:03 GL: Don't sync redundant texture state. TextureGL::syncState would always update the state if a dirty bit was set even if that state was already applied. This exposed some driver bugs such as IMG crashes when setting the border color on too many textures. Bug: angleproject:347186590 Change-Id: I81c2403043b389a2ad3cfe5a3461e3b6cdbc9a5b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5634131 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 165b85b6 2024-06-13T16:54:03 Vulkan: Disable VK_EXT_shader_stencil_export on SwiftShader Bug: chromium:40942995 Change-Id: I4c469108c420d3e68008a30f627989655a64c27c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5630161 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Mohan Maiya 8ae91859 2024-06-13T15:38:11 Vulkan: Optimize ProgramExecutableVk::resetLayout Instead of iterating through all elements of caches and programinfo, track valid permutations of ProgramTransformOptions. Bug: angleproject:8297 Change-Id: I7676f153f696bf8c4fb268792c667fdac12f827c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5629578 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Mohan Maiya 06f1b72f 2024-06-03T08:59:46 Vulkan: Bugfix in MSRTT emulation Transient multisampled images should have no mips. Enforce this requirement when MSRTT is being emulated Bug: angleproject:4836 Tests: MultisampledRenderToTexture*MultipleLevelsMultisample* Change-Id: I6df21bbb49a4c45aa3ee321f7d49b81f55352562 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5601347 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 479c950e 2024-06-06T00:00:00 D3D11: Implement fragment shader image2D layout updates Checked for updated image2D bind layout when triggering program recompilation. Included image2D bind layout variants into D3DPixelExecutable cache. Added tests for binding 2D array texture layers. Fixed: angleproject:8124 Change-Id: I228a29b5bb175bbf0f8b13e70d1f09e8eb4ebb2f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5630654 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev decaefc9 2024-06-06T00:00:00 D3D11: Generalize shader image2D layout cache Ensured that mImage2DBindLayoutCache exists for vertex and fragment shaders. Changed the dirty bit used for image binding updates because they use the ShaderConstants11::updateBuffer function, which is called only for driver uniform updates of vertex and fragment shaders. Bug: angleproject:8124 Change-Id: Ifdfc18f28598b636a1019f53af7617a60c12412e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5621178 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 53fdd3b1 2024-06-11T08:53:55 Vulkan: Remove suppression for fixed syncval error VVL bug fixed upstream. Bug: angleproject:344031874 Change-Id: I2521744439b93531ef9bab66a37cd71884a74cf1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5621970 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 65f8dc8e 2024-06-12T17:01:54 Vulkan: Remove traces of VK_MSRTSS_GOOGLEX Devices that shipped this unreleased extension should have long been updated to VK_MSRTSS_EXT Bug: angleproject:4836 Change-Id: I23736ebf28afd4a6f3b5b0d5a6417b3e7564c293 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5627575 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 75625e6b 2024-06-11T11:10:24 Vulkan: Clean up ImageHelper::flushSingleSubresourceStagedUpdates This CL changed some logic to use helper function to make logic more clear. Bug: angleproject:42263375 Change-Id: I5d0ec0f6b0a315f9e755939420a655976a2fef5b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5620736 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Roman Lavrov 15c182f9 2024-06-11T09:47:07 Vulkan: remove deferFlushUntilEndRenderPass feature, always on This only applies to Qualcomm chipsets, the feature was already enabled for all other devices. It was previously causing a manhattan 3.0 perf regression on some Qualcomm devices, but my tests on S24 both with ANGLE trace manhattan_31 and running gfxbench manually do not show any obvious regression. It was also not expected that this would result in a regression. As we do not aim to improve perf on older devices, removing the feature altogether so that defers are always enabled. This change resulted in a change in gold images on these traces on pixel 4 bots: pokemon_masters_ex - text was missing and now is rendered street_fighter_iv_ce_frame86 - shadow was missing and now is rendered So it looks like the feature may have been working incorrectly. Bug: b/346378481 Change-Id: I2b0d15b89e11c67dea7c316a42bc807441c43b0a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5622115 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Amirali Abdolrashidi 6554cd32 2024-06-07T16:26:10 Add validation for FramebufferTexture FramebufferTexture() was added as part of the geometry shader extension. However, it has become core in GLES 3.2. * Added validation for glFramebufferTexture(). * Added unit tests to check for validation errors for the OES and 3.2 core versions. Bug: angleproject:42262233 Change-Id: I2696d37bb54a26f0fe455107dca472cc05063fa6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5605108 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Charlie Lao b4f3824e 2024-05-31T11:36:32 Reland "Vulkan: Defer texture data flush until data provided for all levels" This is a reland of commit 490c056a88a33870cb4ba2a7906b0a9688d96262 Original change's description: > Vulkan: Defer texture data flush until data provided for all levels > > One of the major overhead with VkEvent is seeing with first frame where > all textures are being specified. The immutable textures, we always > immediately flush out the update as data provided for each level. This > means one VkEvent is created and SetEvent is called per level. This CL > delays the flush until data for all levels are provided, thus there is > only one flush per texture instead of per level. With this CL asphalt_9 > is no longer timeout on bots when VkEvent is enabled. > > There is also another benefit comes with this CL. On all desktop GPUs, > ASTC format texture are falling back to RGBA8. We always stage a clear > for the emulated format. That staged clear are able to be removed if > data is provided later. Because of we flush out staged update when first > level data is provided, all staged clear for the subsequent levels are > also gets flushed out, losing the chance to be removed. This CL will > allow all staged clears being removed. > > Bug: b/343976993 > Bug: b/336844257 > Change-Id: Ica731ea57db771b16966f4da92ccdc551ae93d81 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5588816 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/343976993 Bug: b/336844257 Change-Id: Iabcc1b4ebca7d6f34a0e7f109795392fc00e7eda Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5606146 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Yuxin Hu 9c391154 2024-06-06T18:24:18 Vulkan: Do not apply advanced blend emulation when blend is disabled The emulateAdvancedBlendEquations code path does not check if GL_BLEND is disabled. This CL adds the check so that the blend is not applied when we disable the GL_BLEND. This CL also adds an updateAdvancedBlendEquations() when DIRTY_BIT_BLEND_ENABLED bit is set. This ensures DIRTY_BIT_DRIVER_UNIFORMS bit is set when GL_BLEND state changes, meaning we will regenerate the uniforms if GL_BLEND state changes: GL_BLEND is enabled: pass the advanced blend equations to the uniforms; GL_BLEND is disabled: do not pass the advanced blend equations to the unforms Bug: b/345581214 Change-Id: I5708a4051647bc29b5b38a027e836f5bf717d1d5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5605109 Auto-Submit: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 5b8e380c 2024-06-10T17:54:25 Vulkan: Fix bug in ImageHelper::flushSingleSubresourceStagedUpdates There is another bug in ImageHelper flush staged update code path that exposed by a new test I added in crrev.com/c/5606145. When we render to a multi-layered texture and that layer we are trying to render to has a staged clear and followed by an buffer update, and if the buffer update overlaps with layer we try to render to but not exact match, we will incorrectly think that the glClear call can override the buffer update. The bug here is that ImageHelper::flushSingleSubresourceStagedUpdates is using ImageHelper::SubresourceUpdate::isUpdateToLayers() call to decide if buffer update will be overriden. That isUpdateToLayers is only looking exact layer range match. So in this case because the buffer update's layer range is bigger than glClear, it returns false. This causes the flushSingleSubresourceStagedUpdates think it is outside the layer range we try to render, and causes rendering bug. This CL renames isUpdateToLayers to isLayerRangeExactMatch to reflect the actual behavior of the function. This CL also adds new API isWithinLayerRange and called by flushSingleSubresourceStagedUpdates to decide if the updates can implement using renderPass loadOp. Bug: angleproject:345532371 Bug: angleproject:42263375 Change-Id: Ia604ed1a61b56d7bde05f12a03baef8f00af2b17 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5619730 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi ebb56cee 2024-05-31T15:10:37 Implement OES_tessellation_shader Based on the specs, there are no functional differences between OES and EXT. * Added validation for glPatchParameteriOES() and the core glPatchParameteri(). * Added the extension support for GLSL. * EXT_shader_io_blocks is implicitly enabled for the EXT geometry and tessellation shader extensions. * OES_shader_io_blocks is implicitly enabled for the OES versions of said extensions. * Added a test to make sure using this extension works instead of EXT. * Turned the repeated test code into a function: * testTessellationTextureBufferAccess * Skipped the tests that fail on various platforms. * It seems that these tests were being skipped before enabling this extension ("Not supported"). Bug: b/344030760 Bug: angleproject:345306326 Bug: angleproject:345304850 Bug: angleproject:345312771 Change-Id: I905da0132bf6525cb453dcaa613e4deb3155c4dd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5595611 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi 8042ebdc 2024-05-31T17:06:56 Add OES_tessellation_shader Bug: b/344030760 Change-Id: I49c5dd870a09cd6b43beea13c70b8c1a4266875b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5595610 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Charlie Lao 81452425 2024-06-07T11:49:28 Vulkan: Fix keeping overlapped updates in flushStagedUpdatesImpl() There is an existing bug in ImageHelper::flushStagedUpdatesImpl() that caused webGPU test to fail when my CL crrev.com/c/5588816 landed. The bug is that when we flush out an update, we walk through the vector updates and if the update is outside the range of requested layer range, we stash away the update to updatesToKeep list. We only flush out the updates that are intersects with the requested layer range. The bug here is that if one of the update has bigger layer range than the requested layer range, and there is an update that intersects with that update's layer range but not overlap with requested layer range, now that update may incorrectly gets moved to updatesToKeep list. Later on when that updatesToKeep list gets flushed out, you end up overwriting the image content. This CL adds a new function adjustLayerRange() that first walk the updates and calculate the actual layer range that will be flushed and then use that adjusted layer range to determine if an update should be kept or flushed. Bug: angleproject:345532371 Change-Id: I59ef4ec935354766d35e4cfbb6ce4b13d9a2e868 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5607276 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi c519a4a6 2024-06-10T15:56:36 Vulkan: Add dynamic rendering features Bug: angleproject:42267038 Change-Id: Ic2cdc277f6bb1bb3ce273a866bdb2ce6f5930355 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5617653 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Alexey Knyazev 57524dc9 2024-06-06T00:00:00 Fix shader image level rebinding Added a test that interleaves two draw calls with rebinding the texture level of a shader image; fixed surface init. Vulkan: Fixed subresource serial generation. D3D11: Fixed dirty bit setting. Fixed: angleproject:7647 Bug: angleproject:8124 Change-Id: I4b5d095a1714f31a4f7b63f96dedb366faa17a03 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5611298 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 18bb6e54 2024-06-06T00:00:00 Metal: Support non-layered 2D array shader images Fixed: angleproject:8125 Change-Id: Id148c09d948487bb677c4a3af746e6ea151d84a7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5604225 Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 5b4eae44 2024-06-06T00:00:00 GL: Do not set layer params for non-layered image bindings Some drivers do not ignore them and image access behaves incorrectly. Bug: angleproject:344950165 Change-Id: I4e369d093bc61f7ebef8fb1058bf2475605c729c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5610693 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao f5d6112b 2024-06-05T17:20:45 Vulkan: Remove EventStage::BottomOfPipe and AllCommands These two StageFlags never being used in VkCmdSetEvent, and should not be used given that these are very strong synchronization. They are removed in this CL. Bug: b/336844257 Change-Id: I68a47a5459dadf56ad5c269ebb3af55887110cc7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5601811 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 295ff607 2024-06-05T14:49:33 Vulkan: Precompute stageMask of kImageMemoryBarrierData Right now every time we need a pipelineStage in kImageMemoryBarrierData, we are doing a bitwise AND with mSupportedVulkanPipelineStageMask. This get called multiple times from barrier call. This CL adds mImageLayoutAndMemoryBarrierDataMap that has already precomputed all stageMask, thus avoid run time bitwise OR. This CL also precomputes the bufferWritePipelineStageMask so that flushImpl can be use it without construct every time. Bug: b/345279810 Change-Id: I878bd31c967cd217477061976f07df13b043fa7f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5601073 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 4d47c73a 2024-06-04T15:43:36 Vulkan: Enable SyncVal for VkEvent based barriers Previously SyncVal is disabled due to some tests time out when VkEvent is enabled. Now with earlier CLs that reduces number of VkEvents being used, we are able to enable SyncVal again when event based barriers are enabled. Bug: b/336844257 Change-Id: Idb4f8646495cd087d79f2d09cd12fccfa9062792 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5597733 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 87bbeaee 2024-06-03T15:04:25 Vulkan: Reduce VkEvent counts by using EventStage enums Right now we are using too many VkCmdSetEvents and causes some of the deqp tests timeout on CI bots (because of VVL is very slow along with the number of events being used). RefCountedEvents are per ImageLayout. But some of ImageLayous have the same VkPipelineStageFlags, for example TransferSrc and TransferDst. This CL changes RefCountedEvent to per unique VkPipelineStageFlags instead of per ImageLayout, thus allows TransferSrc and TransferDst to share one VkEvent. To do that, EventStage enum and kEventStageAndPipelineStageFlagsMap table are added to define the predefined VkPielineStageFlags that ANGLE uses. RefCountedEvent now keeps EventStage instead of ImageLayout. To further reduce the CPU overhead, a customized mPipelineStageMaskAndEventMap table is precomputed in renderer with supported vulkan pipeline stages. With this CL, previously timed out tests such as KHR-GLES3.copy_tex_image_conversions.forbidden.renderbuffer_cubemap* now passing. Bug: b/336844257 Change-Id: I021a8f1d6112d5cf96c61652c9af5f679b1172eb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5597732 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Amirali Abdolrashidi 25374c90 2024-05-31T16:08:58 Implement OES_gpu_shader5 Based on the specs, there is no difference between the OES version and the EXT version. * Added support for use in shaders * Added test to make sure the OES extension works. * Turned the repeated test code into a function: * testArrayOfArrayOfSamplerDynamicIndex() Bug: b/344031022 Change-Id: Ifda4fa5495983d254f598940a95d0797e8a9ce67 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5595609 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Amirali Abdolrashidi edaaacd9 2024-05-31T17:30:34 Add OES_gpu_shader5 Bug: b/344031022 Change-Id: Ib11b5835b566e299ce6a7a47a4e4a46bcfd670ad Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5595608 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 72c94302 2024-06-04T17:24:24 Vulkan: Enable OES_copy_image Based on the spec, OES_copy_image is functionally identical to EXT_copy_image. In addition, they have both been implemented. However, OES_copy_image remained disabled before this change. * Enabled copyImageOES in vk_caps_utils. * Updated the validation for glCopyImageSubDataOES() so it will check for OES_copy_image instead of EXT_copy_image. * Added the enum class APIExtensionVersion to simplify testing multiple versions of the same API (e.g., EXT, OES) * Added tests using CopyImageSubDataOES(). * Turned the repeated test code into functions: * testCopyImage() * testCopyImageDepthStencil() Bug: b/345013929 Change-Id: Ica36882630dac98775626699a170bffe9404273c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5597736 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Charlie Lao 92f198f6 2024-06-06T21:42:35 Revert "Reland "Vulkan: Defer texture data flush until data provided for all levels"" This reverts commit b93af07ac1ddb9f2e262d611d155f4b63f18999f. Reason for revert: b/345532371 Original change's description: > Reland "Vulkan: Defer texture data flush until data provided for all levels" > > This is a reland of commit 490c056a88a33870cb4ba2a7906b0a9688d96262 > > Original change's description: > > Vulkan: Defer texture data flush until data provided for all levels > > > > One of the major overhead with VkEvent is seeing with first frame where > > all textures are being specified. The immutable textures, we always > > immediately flush out the update as data provided for each level. This > > means one VkEvent is created and SetEvent is called per level. This CL > > delays the flush until data for all levels are provided, thus there is > > only one flush per texture instead of per level. With this CL asphalt_9 > > is no longer timeout on bots when VkEvent is enabled. > > > > There is also another benefit comes with this CL. On all desktop GPUs, > > ASTC format texture are falling back to RGBA8. We always stage a clear > > for the emulated format. That staged clear are able to be removed if > > data is provided later. Because of we flush out staged update when first > > level data is provided, all staged clear for the subsequent levels are > > also gets flushed out, losing the chance to be removed. This CL will > > allow all staged clears being removed. > > > > Bug: b/343976993 > > Bug: b/336844257 > > Change-Id: Ica731ea57db771b16966f4da92ccdc551ae93d81 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5588816 > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> > > Commit-Queue: Charlie Lao <cclao@google.com> > > Bug: b/343976993 > Bug: b/336844257 > Change-Id: Ie987582a44e0d73abd38ce8f6813ff8995e907e2 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5597810 > Reviewed-by: Cody Northrop <cnorthrop@google.com> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/343976993 Bug: b/336844257 Change-Id: I9356da6b4cdb21dba47758d6e937d1ae02f0ae34 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5606144 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Alexey Knyazev 2cbac2cf 2024-05-30T00:00:00 Disallow TEXTURE_3D for PLS Using 3D texture slices as PLS planes would require inefficient emulation on some backends. Bug: angleproject:8124 Bug: angleproject:8125 Change-Id: I8fcd4e686bf607deef27a8c091486a9012732f24 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5594092 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Roman Lavrov c60e247e 2024-06-04T17:40:26 Make LinkedUniform.getElementComponents() fully inline-able Before this CL, getElementComponents() calls into GetUniformTypeInfoFromIndex() which cannot be inlined as it uses kInfoTable from uniform_type_info_autogen.cpp. That table is fairly large however, so this CL adds the elementComponents part of that structure to an inlinle GetUniformElementComponents() function. This allows to fully inline LinkedUniform.getElementComponents() which significantly simplifies clampUniformCount() assembly code, to the point where this leads to a (small but) measurable performance improvement in driver_overhead_2 trace despite getElementComponents _never actually getting called_ (because count is always == 1 and clampUniformCount returns early). This appears to be caused by a side effect of the function call, where clang generates prologue and epilogue instructions that are still executed on the fast path when the function is not getting called (even if ANGLE_LIKELY is added or code rearranged). Bug: b/335295728 Change-Id: If8f2068b098576246ab90ffbacd5a520cc843f49 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5597885 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 7d65c945 2024-06-06T09:01:40 Vulkan: Limit SSBO max size to 256MB on older Mali GPUs Bug: angleproject:345244067 Change-Id: I18ff10198fc3db3a82a0897319fba5fb200a2a05 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5603109 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 147ba459 2024-05-30T00:00:00 Allow polygonMode* commands with active PLS Drive-by: * Test that polygonOffsetClampEXT is allowed when PLS is active. Fixed: angleproject:345253437 Change-Id: I5d9f60b3e70eaf8da19017a8b9d6c2592cb4f4f8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5601849 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao b93af07a 2024-05-31T11:36:32 Reland "Vulkan: Defer texture data flush until data provided for all levels" This is a reland of commit 490c056a88a33870cb4ba2a7906b0a9688d96262 Original change's description: > Vulkan: Defer texture data flush until data provided for all levels > > One of the major overhead with VkEvent is seeing with first frame where > all textures are being specified. The immutable textures, we always > immediately flush out the update as data provided for each level. This > means one VkEvent is created and SetEvent is called per level. This CL > delays the flush until data for all levels are provided, thus there is > only one flush per texture instead of per level. With this CL asphalt_9 > is no longer timeout on bots when VkEvent is enabled. > > There is also another benefit comes with this CL. On all desktop GPUs, > ASTC format texture are falling back to RGBA8. We always stage a clear > for the emulated format. That staged clear are able to be removed if > data is provided later. Because of we flush out staged update when first > level data is provided, all staged clear for the subsequent levels are > also gets flushed out, losing the chance to be removed. This CL will > allow all staged clears being removed. > > Bug: b/343976993 > Bug: b/336844257 > Change-Id: Ica731ea57db771b16966f4da92ccdc551ae93d81 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5588816 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/343976993 Bug: b/336844257 Change-Id: Ie987582a44e0d73abd38ce8f6813ff8995e907e2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5597810 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Mohan Maiya 6aad8a89 2024-05-31T14:46:28 Vulkan: Remove combineAllShadersInPipelineLibrary If we have VK_NULL_HANDLE as the descriptor set layout handle for both pre-rasterization and fragment shader subset pipelines we run into VVL - VUID-VkGraphicsPipelineCreateInfo-pLibraries-06681 Need to work around this by having the renderer store a placeholder descriptor set layout handle for an empty DescriptorSetLayoutDesc that can be reused across all contexts Bug: angleproject:8677 Tests: EGLMultiContextTest.NonSharedContextsReuseDescritorSetLayoutHandle* Change-Id: I22e7f39c497d7f668afe7cb26690f6a9de49831b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5587990 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Liza Burakova 657c8c0a 2024-06-04T15:16:20 Add optimization to defer clear calls. This change adds a new SubresourceUpdate struct that will hold either an update for a clear call or a texture upload in an ImageHelper's update queue. It also adds logic to defer clear calls similar to Vulkan's, where clears are deferred if there is not an active render pass. Draw based clears are not yet supported, so the optimization does not handle those yet. Bug: angleproject:8582 Change-Id: I3ee010fa64745871835d53ce0ccb56e3fdd74550 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5554984 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Matthew Denton <mpdenton@chromium.org> Commit-Queue: Liza Burakova <liza@chromium.org>
Amirali Abdolrashidi 1ecb9ba3 2024-06-03T18:04:34 Vulkan: Make logging GLES32 ext conditional * Added the following flag: * kEnableLogMissingExtensionsForGLES32 * Only if enabled will LogMissingExtensionsForGLES32() log missing extensions required for GLES 3.2. Bug: b/344455232 Bug: b/336860504 Change-Id: I1b10212b0b67e61a0884b1d8af1bb395e693323c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5595319 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 68a899c2 2024-06-04T12:02:06 Vulkan: Remove shaderProgramOut from initGraphicsShaderPrograms - Remove `shaderProgramOut` from `ProgramExecutableVk` `initGraphicsShaderPrograms()` method, because in all instances argument was `nullptr` (unused). - Update `ProgramInfo::getShaderProgram()` to return reference instead of pointer. This removes confusion, causing unnecessary ASSERTs that checked result for `nullptr`. Note: CL that removed last use of `shaderProgramOut`: https://chromium-review.googlesource.com/c/angle/angle/+/5408796 Bug: angleproject:8297 Change-Id: Idf9fb1c3fd42e90dd385f48a5714ea2751f0c7db Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5596549 Commit-Queue: Igor Nazarov <i.nazarov@samsung.com> Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov d0280f09 2024-06-03T13:21:06 Cleanup Program Executable post link task wait Frontend changes: - Add `ASSERT` into `ProgramExecutable::waitForPostLinkTasks()` to check that `mPostLinkSubTasks` must be empty after backend wait. - Add `UNIMPLEMENTED` into `ProgramExecutableImpl` `waitForPostLinkTasks()`, because this method is only required if backend fills `postLinkSubTasksOut` in `LinkTask`, and frontend must not call this method if `mPostLinkSubTasks` are empty. Vulkan backend changes: - Add public `ProgramExecutableVk::waitForComputePostLinkTasks()` with ASSERT to only allow usage with Compute executable. This change avoids confusion calling `waitForPostLinkTasksIfNecessary()` with `nullptr` in case of the Compute pipelines, which will always wait. - Rename `waitForPostLinkTasksIfNecessary()` to `waitForGraphicsPostLinkTasks()`, add ASSERT to only allow usage with Graphics executable, and change optional pointer to the `GraphicsPipelineDesc` to the reference. - Add `WaitableEvent::AllReady()` check into `ProgramExecutableVk` `waitForGraphicsPostLinkTasks()` when going to skip waiting, in order to process tasks (by calling wait) when all tasks are ready. Without this change, post link task may never be processed, causing repeated `GraphicsPipelineDesc` comparisons. - Replace `GraphicsPipelineDesc` hash comparison in `waitForGraphicsPostLinkTasks()` with `keyEqual()` call. This method is around 7 times faster, however effect on the overall performance will likely be unmeasurable. Changed for clarity. - Remove unnecessary `mWarmUpGraphicsPipelineDesc` reset from: `ProgramExecutableVk` initializer list (has default constructor), Compute warmup (already clean after constructor), wait post link tasks (not used when no tasks). - Other minor changes. Bug: angleproject:8297 Change-Id: I7d790da6712be013243083e314af75f82e73886d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5592474 Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Igor Nazarov c41cbb3d 2024-06-03T18:59:27 Fix binary is not cached after isBinaryReady() is true Backend may wait and clear `mPostLinkSubTasks`. The `isBinaryReady()` will check, that there are no tasks, and will skip the caching. This change renamed `cacheProgramBinaryIfNotAlready()` to more general `cacheProgramBinaryIfNecessary()`, because it skips caching if there are post link tasks. The `cacheProgramBinary()` renamed to `cacheProgramBinaryIfNotAlready()`, to better reflect it's behavior. Call `cacheProgramBinaryIfNotAlready()` from `isBinaryReady()` if there no post link tasks to ensure binary is cached. Removed check for empty `mPostLinkSubTasks` before calling executable's wait, because same check already performed internally. The `waitForPostLinkTasks()` is not on hot path and does not require avoiding no-op method call. Bug: angleproject:8297 Change-Id: I2bd78c15231805cda4b62a9889287d8cf780cd1e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5593928 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Yuly Novikov 170851ff 2024-06-04T09:01:11 Revert "Vulkan: Defer texture data flush until data provided for all levels" This reverts commit 490c056a88a33870cb4ba2a7906b0a9688d96262. Reason for revert: breaks win-trace https://ci.chromium.org/ui/p/angle/builders/ci/win-trace/6014/overview Original change's description: > Vulkan: Defer texture data flush until data provided for all levels > > One of the major overhead with VkEvent is seeing with first frame where > all textures are being specified. The immutable textures, we always > immediately flush out the update as data provided for each level. This > means one VkEvent is created and SetEvent is called per level. This CL > delays the flush until data for all levels are provided, thus there is > only one flush per texture instead of per level. With this CL asphalt_9 > is no longer timeout on bots when VkEvent is enabled. > > There is also another benefit comes with this CL. On all desktop GPUs, > ASTC format texture are falling back to RGBA8. We always stage a clear > for the emulated format. That staged clear are able to be removed if > data is provided later. Because of we flush out staged update when first > level data is provided, all staged clear for the subsequent levels are > also gets flushed out, losing the chance to be removed. This CL will > allow all staged clears being removed. > > Bug: b/343976993 > Bug: b/336844257 > Change-Id: Ica731ea57db771b16966f4da92ccdc551ae93d81 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5588816 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: b/343976993 Bug: b/336844257 Change-Id: I25854b855334c4cac1c2b40467d8e2ecb7661b8f No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5593935 Auto-Submit: Yuly Novikov <ynovikov@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Charlie Lao 490c056a 2024-05-31T11:36:32 Vulkan: Defer texture data flush until data provided for all levels One of the major overhead with VkEvent is seeing with first frame where all textures are being specified. The immutable textures, we always immediately flush out the update as data provided for each level. This means one VkEvent is created and SetEvent is called per level. This CL delays the flush until data for all levels are provided, thus there is only one flush per texture instead of per level. With this CL asphalt_9 is no longer timeout on bots when VkEvent is enabled. There is also another benefit comes with this CL. On all desktop GPUs, ASTC format texture are falling back to RGBA8. We always stage a clear for the emulated format. That staged clear are able to be removed if data is provided later. Because of we flush out staged update when first level data is provided, all staged clear for the subsequent levels are also gets flushed out, losing the chance to be removed. This CL will allow all staged clears being removed. Bug: b/343976993 Bug: b/336844257 Change-Id: Ica731ea57db771b16966f4da92ccdc551ae93d81 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5588816 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Solti 9ca4c0df 2024-05-31T23:08:26 Manual roll vulkan-deps from f7e762742da9 to d4f7e6e954db (1 revision) Manual roll requested by solti@google.com https://chromium.googlesource.com/vulkan-deps.git/+log/f7e762742da9..d4f7e6e954db Also rolling transitive DEPS: https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers/+log/ff56cf67d3494eec1243cc4225d1667e9b3f90cd..e15fdd01eff029f2bf15e63970f2a7cebf2999b0 If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/vulkan-deps-angle-autoroll Please CC angle-team@google.com,solti@google.com on the revert to ensure that a human is aware of the problem. 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 Note: - in addition to the DEPS, this CL suppresses the VVL error. Bug: angleproject:344031874 Bug: b/343202259 Change-Id: I145d09821ba1ae4adbefcf151d3a852f00c3f950 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5587991 Commit-Queue: Solti Ho <solti@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao a87ca02c 2024-05-31T11:18:52 Vulkan: change shouldUpdateBeStaged to shouldUpdateBeFlushed All usage of shouldUpdateBeStaged() is actually a negate if(!shouldUpdateBeStaged(...)) {doFlush();}. This CL changes shouldUpdateBeStaged to shouldUpdateBeFlushed to make it easier to read. The other change is that there is a distinction of a texture update must be flushed and update prefer to be flushed. So shouldUpdateBeStaged() logic has been split into two functions updateMustBeStaged and updateMustBeFlushed. shouldUpdateBeFlushed simply because it is either must be flushed or not mustBeStaged (proactively flush for performance reason). This CL is also a preparation for next CL. No actual behavior change is expected here. Bug: b/343976993 Change-Id: Icd9f57f43b6fb5761e9845cc6f27f9458073f905 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5588815 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Roman Lavrov 5e66f6e4 2024-06-03T09:27:44 Vulkan: Make setUniformMatrixfv a free function Same as https://crrev.com/c/5588853 but for matrices const gl::ProgramExecutable and non-const output variables, makes it clear that it only updates: mDefaultUniformBlocks mDefaultUniformBlocksDirty Bug: angleproject:8666 Bug: b/335295728 Change-Id: Ie5a5d527bf314309860fc7ca193c2a32013e7872 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5592968 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yiwei Zhang 42a61f6e 2024-06-01T23:25:39 Vulkan: no longer need isVenus condition All things needed by Venus have been upstreamed or gated behind the actual hw driver backend. Bug: None Test: build Change-Id: I5cec111aaeac5cc5cef05e199653489ee6dffc2d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5591469 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 1fa6c020 2024-05-28T14:44:09 Vulkan: Add multisample line width query support * As part of GLES 3.2 support, added support to query the following through glGetFloatv(): * GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY * GL_MULTISAMPLE_LINE_WIDTH_RANGE * Added some tests to check the limits of the values above. * Updated comment regarding ES 3.2 spec table number. Bug: angleproject:42266081 Bug: b/336860504 Change-Id: I2c359bbb9003b3e76f342f7419477bdb1caaf88f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5576760 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi d353f2ce 2024-05-31T16:57:41 Vulkan: Check any robustness instead of EXT only * Updated checks for robustnessEXT with robustnessAny(), which also includes robustnessKHR. Bug: angleproject:42262244 Change-Id: Ia79bc7f1a5ead29417eec0a5663b70d79c34ad56 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5587992 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi ddd93740 2024-05-16T15:49:47 Vulkan: Extend GLES 3.2 extension requirements * Added CanSupportGLES32() to extend the extension requirements for GLES 3.2. * The following function returns the extension list: * GetRequiredGLES32ExtensionList() * If any required feature is not supported, we must fall back to GLES 3.1 (unless exposeNonConformantExtensionsAndVersions is enabled). * Added LogMissingExtensionsForGLES32() to log any missing extension that is required for GLES 3.2. * (Currently, if xfb extension is not supported and cannot be emulated, we fall back to GLES 2.0.) * (KHR_debug by default is marked as a supported extension in the frontend. Therefore it is not added to the check.) * In generateSupportedExtensions() * CanSupportGPUShader5EXT() is now private to vk_cap_utils.cpp. * Before checking if the max GLES version should be capped, we make sure that the caps are initialized. Bug: angleproject:42263905 Bug: b/336860504 Change-Id: Ib5d85df310c6ec7df6258d3ea430f9c365153fb1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5544455 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 1db5581d 2024-05-21T13:07:44 Implement KHR_robustness * Added implementation for the validation layers for the added functions, and updated some of the existing ones. * The core functions require GLES 3.2. * The KHR functions have been limited to GLES 2.0+. * KHR_robustness requires GLES 2.0 and removes support for GLES 1.1 for logistical reasons. * Some functions require GLES 3.0 with this extension, which become core in GLES 3.2. * glGetnUniformuivKHR() * Enabled robustnessKHR on several platforms. * Added unit tests similar to ContextLostTest.BasicUsage for the new cases. * Added ContextLostTestES32 for the core usage in GLES 3.2. Bug: angleproject:42262244 Change-Id: Id1425c39d9a1a66ae1a90048b673cb1ae391c0ef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5555985 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi ce6232fc 2024-05-21T11:15:51 Add KHR_robustness * From the spec, there are some differences between KHR_robustness and EXT_robustness (already in use). In this CL, the following are addressed: * Updating the EXT suffixes * Changing EXT to KHR for GLES * Removing EXT for GL * Adding GLGetnUniformuivKHR (no equivalent in EXT) * Added GL_KHR_robustness to the list of extensions. * The API implementations seem to be already in place. * Validation functions will be updated in a follow-up CL. Bug: angleproject:42262244 Change-Id: Ibbc1bc11ec08ac756f4a03d11f51ba1268d037a5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5555984 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov 9137d9a9 2024-05-31T12:28:04 Vulkan: Make setUniformImpl a free function const gl::ProgramExecutable and non-const output variables, makes it clear that it only updates: mDefaultUniformBlocks mDefaultUniformBlocksDirty Bug: angleproject:8666 Bug: b/335295728 Change-Id: I8851eb500c3e09e896d02c0f83b700cde2a1bbf1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5588853 Auto-Submit: Roman Lavrov <romanl@google.com> Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Roman Lavrov 0508fc9b 2024-04-23T15:32:52 Reland "Cleanup: replace DirtyObjectType check with constexpr generator" Avoid using lambdas with member function pointers which caused issues on MSVC C++17. This is a reland of commit 89caa0e1d99e45f3d6f355f6e14c147f8de3e0e5 Original change's description: > Cleanup: replace DirtyObjectType check with constexpr generator > > Static assert was meant to avoid kDirtyObjectHandlers getting out of > sync, but it doesn't achieve that goal as it's just comparing values > with ints which is confusing. > > Replacing with constexpr generated std::array. C++20 allows to easily > validate that all values are set by _not_ default-initializing > `handlers`. C++17 makes it trickier, addeded static_assert on an > additional static constexpr bool (silly but I can't find a more concise > way) > > Bug: angleproject:8666 > Bug: b/335295728 > Change-Id: Idf9bbd087d09d5ba253a7587ce0503cae3fcf3a7 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5478231 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Roman Lavrov <romanl@google.com> Bug: angleproject:8666 Bug: b/335295728 Change-Id: I62e66b700512e072ef10cc57a17e8837a534c0d5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5589285 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang 7ce42b42 2024-05-30T16:08:12 Skip Display::prepareForCall calls everywhere except Mac. Display::prepareForCall was added for CGL and EAGL backends which need to know when an EGL call on a new thread is about to happen. Making this virtual call on all EGL calls on all platforms adds overhead which we can avoid so compile out prepareForCall everywhere except Mac. Bug: angleproject:8434 Change-Id: I7b50463ed405a73eb993e18eb4f83434b4a4fd6e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5582015 Commit-Queue: Geoff Lang <geofflang@chromium.org> Auto-Submit: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang 0e892a02 2024-05-30T14:07:47 EGL: Move egl surface timing calls into tail calls. eglGetCompositorTimingANDROID and eglGetFrameTimestampsANDROID can both take a lot of driver time to execute proportional to ANGLE's overhead. Bug: angleproject:42266858 Change-Id: I9b991f74a261b45aeb2aaf133fca7d22cabc41f8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5580877 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 11c92f77 2024-03-29T16:19:05 Vulkan: Optimize ProgramExecutable::shouldIgnoreUniform() Increases GFX Bench offscreen driver overhead performance on Samsung S24 S921B (locked frequencies) 6201 -> 6327 frames (+2%) Regression commit: Fix off-by-one bounds check on uniform location. fba482b7107ccf3e178f6bf56b6b0285407ace3a Bug: chromium:1504162 Bug: chromium:1484878 Change-Id: I164cbb9feeacd35979cc60aa3489252397a3e2bf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5585896 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 67036978 2024-05-30T00:00:00 Update Intel PCI IDs Synced with Mesa headers: * Changed one EHL PCI ID * Changed four ADL PCI IDs * Added six more RPL PCI IDs Fixed: angleproject:343037865 Change-Id: I5218c94265e33bb640e2c3109ce62e93255e8d28 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5580878 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Le Hoang Quyen 4d4c99b1 2024-05-31T02:07:11 Metal: skip copying via parentTexture on iOS simulator. iOS simulator has bug in [MTLTexture parentRelativeSlice] so don't use it to upload data to the texture. Bug: angleproject:343734719 Change-Id: I78cf0066c1120c04f9b62c30e280ad866c2096d7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5584042 Reviewed-by: Kenneth Russell <kbr@chromium.org> Auto-Submit: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Roman Lavrov 818915a9 2024-05-27T10:53:35 PPO: Propagate dirty uniforms via mPPOProgramExecutables This eliminates the need for ProgramUniformUpdated notification Update mDefaultUniformBlocksDirty rather than just add a check to hasDirtyUniforms, as mDefaultUniformBlocksDirty can then be used elsewhere (for example, calcUniformUpdateRequiredSpace) Also adds ProgramExecutable.mIsPPO flag for an easy check for PPO without inspecting mPPOProgramExecutables Bug: angleproject:8666 Bug: b/335295728 Change-Id: I7725d02460104997df5c89a54d0e5ef3c3079946 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5569184 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi c33c6cd3 2024-05-27T00:06:18 Vulkan: Use OpSelect with all types with SPIR-V 1.4 SPIR-V 1.4 relaxes the types that can be used as arguments of OpSelect. Previously, the types were limited to scalars and vectors, but since SPIR-V 1.4, it's unrestricted. Writing tests for this change, another bug was discovered where support for structs and arrays with the ternary operator was disabled due to ESSL 1.0, even though that support is mandatory in ESSL 3.2. Bug: angleproject:342316794 Bug: angleproject:343218491 Bug: angleproject:3830 Change-Id: I6cff2f8178634369f773c4fb16a1ddde96928c8d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5570154 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 34b832a3 2024-05-24T13:38:58 Vulkan: Add RefCountedEvent recycler Previously the recycler was disabled due to race between resetEvent and setEvent. This CL splits mFreeStack into two list: mEventsToReset and mEventsToReuse. Events are first added to mEventsToReset list. Then at OutsideRenderPassCommandBufferHelper::flushToPrimary time, VkCmdResetEvents are added to reset all events in mEventsToReset list, and that reset operation is tracked by mResettingQueue. When reset command is completed, events moved into mEventsToReuse list. Since access to renderer's RefCountedEventRecycler requires lock, RefCountedEventCollector (a queue of events) is passed between ShareGroupVk and renderer's recycler to minimize the locked access. Bug: b/336844257 Change-Id: Iffac095729a81ba65a43df68cc9255d76e4be7c9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5576757 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi c53b3405 2024-05-25T02:50:27 Vulkan: Use OpCopyLogical with SPIR-V 1.4 When shaders copy structs and arrays, this instruction saves a lot of churn in the SPIR-V. Bug: angleproject:342316794 Bug: angleproject:343218484 Change-Id: I698a8d8ee8c15113e40602a0f4953726bc9a84f7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5570152 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao 018188c7 2024-05-28T14:44:14 Vulkan: Fix CachedPreferCoherent to actually require cached VK_MEMORY_PROPERTY_HOST_CACHED_BIT should be in requiredBits instead of preferredBits for CachedPreferCoherent buffer. This again caused pixel6 test failures. flush() call is added right after buffer allocation to fix the test failure. This likely is due to the spec says " If a range of non-coherent memory is written by the host and then invalidated without first being flushed, its contents are undefined.". Bug: b/339562049 Change-Id: Ie8529722bd03534598b03983ba447131573b1879 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5578276 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov d1db33b9 2024-05-20T16:49:18 Vulkan: Cleanup EXT_sRGB_write_control support Bug: angleproject:5075 Change-Id: I91f40aaeaf5ff661ee2e227b5b1bb30a5b400e46 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5573396 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Shahbaz Youssefi 9620d4d3 2024-05-23T16:12:52 Vulkan: Emit SPIR-V 1.4 where available In preparation for optimizations possible for SPIR-V 1.4. This change makes ANGLE output SPIR-V 1.4 if supported, and SPIR-V 1.3 otherwise. It handles the following differences between the two versions: - OpEntryPoint in SPIR-V 1.4 includes all global variables, as opposed to SPIR-V 1.3 where only the Input and Output variables are listed - Storage buffers use a dedicated storage class in SPIR-V 1.4 Bug: angleproject:342316794 Change-Id: I157ed46449ff2d0f14d284b883b4ddc1b4b46fd1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5565224 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 55c8c714 2024-05-23T17:26:24 Vulkan: Enable ABE emulation for Android * Enabled emulating advanced blend equations for all Android devices without VK_EXT_blend_operation_advanced. Bug: b/336860504 Change-Id: I97bf654dc4058b5a92d7de32b1000fb7aff86828 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5567092 Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 3467f0f2 2024-05-20T16:24:53 Vulkan: Cleanup QCOM foveated rendering extensions support Change removed `ContextVK::updateFoveatedRendering()` method because of the following: - Modifying `mGraphicsPipelineDesc` without also updating `mGraphicsPipelineTransition` may case usage of incorrect PSO. - Despite of the above, there is no bug, because the update itself is redundant. In all cases, where `updateFoveatedRendering()` was called, there also will be `onDrawFramebufferRenderPassDescChange()` call, that will call `mGraphicsPipelineDesc->updateRenderPassDesc()`. - The `onDrawFramebufferRenderPassDescChange()` will also call `invalidateCurrentGraphicsPipeline()` therefore, there is no need for this call in the `updateFoveatedRendering()`. - In all cases, the `onRenderPassFinished()` is called before `updateFoveatedRendering()`, therefore, there is no need to set `DIRTY_BIT_RENDER_PASS` bit. - All of the above made `updateFoveatedRendering()` completely redundant (maybe except for the ASSERT). Change also removed `mRenderPassDesc` update from `FramebufferVk::updateFoveationState()`. Note: similar update may be also removed when handling `shouldUpdateSrgbWriteControlMode`. Also fixes possible `mFoveationState` and `mCurrentFramebufferDesc` desynchronization in case if `updateFragmentShadingRateAttachment()` fails. Bug: angleproject:8484 Change-Id: If453bb6691e47aac3c11d0a5a6df696e885b64cb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5573395 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Bruno BELANYI be78da6e 2024-05-22T15:33:46 FrameCapture: log end of trace capture This makes it easy to spot when the capture is done through logcat. Bug: angleproject:343190307 Change-Id: Idf174cbf256242e32cda3c781c8b1092123254bb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5557966 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com> Commit-Queue: Bruno BELANYI <ambroisie@google.com>
Jean-Francois Thibert ceaec322 2024-05-24T11:25:08 Vulkan: use depth stencil bits to check AHB are renderable This resolves an incomplete attachment failure for AHB imported depth buffers. Bug: angleproject:342603523 Change-Id: I16ca0d1bfdab8d542ecf26e5a4e8510171960610 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5570617 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 9b7d8d6a 2024-05-20T20:39:50 Vulkan: Fix AtomicRefCounted threading issue The `AtomicRefCounted::getAndReleaseRef()` is used to decrement the reference counter and to destroy the object if there are no more uses. Decrement operation must use acquire-release memory ordering, in order to guarantee that all accesses from other threads happened before last thread checks that counter is "1" and destroys the object. Added comments to `releaseRef()` and `isReferenced()`, that these methods do not provide any synchronization, and can not be used to achieve same affect as `getAndReleaseRef()`. Relaxed ordering is kept for performance reasons. Bug: angleproject:8601 Change-Id: I8e5654416383e9490c23bc02fda9664216a81076 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5573394 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Roman Lavrov a3057eed 2024-05-27T14:48:51 Vulkan: DIRTY_BIT_DESCRIPTOR_SETS in handleDirtyUniformsImpl For consistency between graphics and compute handling Bug: angleproject:7103 Change-Id: If6db0739d2f75d9e8e77bf88a05466e56d165a0a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5574006 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Igor Nazarov 7c5d2b81 2024-05-21T16:22:53 Vulkan: Add WarmUpTaskCommon::mExecutableVk initialization Change is only for safety, because uninitialized member is not used in the current code. Bug: angleproject:8601 Change-Id: I65fa912119bc9c33a6248c5616388bde4d33b223 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5573393 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Le Hoang Quyen 8db2d61a 2024-05-14T00:39:47 Metal: properly handle base/max level for immutable textures. Previously, we treat every texture the same as a non-immutable texture. Every texture has a native mtl::Texture containing mipmap levels from base GL level to max GL level. And base GL level would be mapped to level 0 of the native texture. However, this is not correct for immutable textures, pbuffer or EGLImage bound textures. Such textures have mipmaps pre-allocated either via glTexStorage calls or externally. Base and max GL levels don't affect their allocated mipmap levels, only limit the levels a shader can sample. For example, a texture has 8 levels allocated via glTexStorage. Its base level is set 1, and max level is set to 2. Shaders will only be able to sample from level 1 to level 2 of this texture. However, it's valid to attach level 0 or level > 2 of this texture to an FBO. This CL addresses this bug by separating internal mtl::Texture into two main objects: - A native storage will contain the actual mipmap levels of the texture. FBO attachment or data uploads can refer to a level in this object. - A view of the native storage from base GL level to max GL level. This view will be used in shader sampling and mipmap generations. Bug: angleproject:6447 Bug: angleproject:8355 Bug: b/42265945 Change-Id: I186b69f02e9e40c75830ffe4b48bd5a3c8d49cf2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5531392 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org> Auto-Submit: Quyen Le <lehoangquyen@chromium.org>
Alexey Knyazev 59adc191 2024-05-23T00:00:00 Metal: Ensure valid vertex buffer layout stride Metal Validation causes runtime failures if the sum of the vertex buffer binding offset and the related vertex layout stride is greater than the buffer's length. Fixed: angleproject:342350849 Change-Id: I531f092c6130b37cb8b0b89b20804a222160ceb7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5565528 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Quyen Le <lehoangquyen@chromium.org>
Alexey Knyazev 6cf3c96d 2024-05-23T00:00:00 Metal: Handle empty vertex buffers Use the current attribute value when the bound array buffer has no data to avoid Metal Validation errors. Drive-by: do not emit empty client data upload commands. Fixed: angleproject:40050025 Change-Id: I813725322c52bc16ca432f617a40fe7cee24dd6d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5569091 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Shahbaz Youssefi 7b0d26bb 2024-05-23T15:46:34 Vulkan: Disable VkEvent for images due to perf regressions Bug: angleproject:336844257 Change-Id: I5732455a48f449f402dc114e019d1dc91142b59e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5565223 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 98402f33 2024-05-23T10:23:29 Vulkan: Explicitly set SPIR-V version Bug: angleproject:342316794 Change-Id: Ide73e3d8b167a932338419cb9da3ea358058ebeb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5564203 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 0d772ebe 2024-05-21T16:41:41 Vulkan: Cleanup releaseToExternal/acquireFromExternal API This CL addresses some feedback from the earlier CLs. Bug: b/337135577 Change-Id: I90c26a9374254af69bf00eb6580ce9580b71ca5a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5561465 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 3bc4e17f 2024-05-22T16:15:23 Vulkan: Pack familyIndex and queueIndex into single uint16_t Practically these are very small number. So we really don't need a uint32_t for each index. The only trick is that even though these indices are uint32_t, some of predefined values are ~1u/~2u which does not fit uint8_t. In this CL, int8_t is used so that all these values are properly downsized and expanded by compiler without branch. Bug: b/337135577 Change-Id: I45ac8ea14c4d7a6f65cb012df70013050f725583 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5560510 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang ccd9a43b 2024-05-22T11:15:39 Split EGL_ANGLE_device_d3d into D3D9 and D3D11 versions. Add EGL_ANGLE_device_d3d9 and EGL_ANGLE_device_d3d11 which make it possible to know what type of device can be queried ahead of time without generating EGL errors. Refactor the DeviceD3D class into Device9 and Device11. Remove the getType method now that it's not needed for internal validation. Keep EGL_ANGLE_device_d3d for backwards compatibility. Bug: angleproject:342096132 Change-Id: Ib950abad58e46a5be269891ea7afd0cb8534cbe8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5559163 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Charlie Lao 602c0edf 2024-04-25T15:08:32 Vulkan: Enable VkEvent for Image barriers This CL actually enables using VkEvent for image barriers. One problem with event is that syncVal is super slow when event is used (it actually slow with VkCmdSetEvent call). which causes a few tests (KHR-GLES3.copy_tex_image_conversions.forbidden.renderbuffer_cubemap_* and asphalt_9) to timeout. These tests did not show signicant overhead with event with VVL disabled, which means the timeout is due to VVL overhead. For now I am disabling syncVal when event is used for image barrier. Since layers are configured before feature bits, a helper function ShouldUseEventForImageBarrier() is introduced to have a central logic enable/disable event. Right ow it just returns true. If we need to disable for a given GPU, we need to pass in proper arguments here while setting up the layers (not sure what exactly will be but will decide when situation comes up). Bug: b/336844257 Change-Id: Iffff8a895e7c767660d327ce9b9e90e6ae0652df Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5492739 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao d27c0f95 2024-05-21T16:27:08 Vulkan: Fix UNASSIGNED-SubmitValidation-WaitEvents-WrongQueue Before this CL, when eventBarrier is used for images, we may see UNASSIGNED-SubmitValidation-WaitEvents-WrongQueue VVL error. What happens is that when context is created with medium priority and image is used, we created VkEvent that was set on medium priority VkQueue. Later on when a new context with higher priority is added to the share group, we upgrade all contexts to high priority and all subsequent commands will be submitted to high priority VkQueue. Now if the image is used and we call VkCmdWaitEvent, we end up waiting on new VkQueue for an event that was set on the old VkQueue. This violates the vulkan spec. With all previous prepartion CLs, now Context and ImageHelper all keeps track of which DeviceQueueIndex it was last used. We can just check the DeviceQueueIndex and fallback to pipelineBarrier if they has changed. When pipelineBarrier is used, the event will be released, and subsequent event will be created on new queue. So this fallback should only occur once for the ImageHelper objects that was experiencing the queue switch. ImageHelper::barrierImpl already checking DeviceQueueIndex changes, so this will automatically works for VkEvent. This CL only needs to add the support for ImageHelper::updateLayoutAndQueue. Bug: b/336844257 Change-Id: Ia3f1caee4f3c8e98dc858d387e93d3b2d6eb8053 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5556443 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 1a9a703b 2024-05-21T11:14:40 Vulkan: Add DeviceQueueIndex to Context/BufferHelper/ImageHelper This CL adds a utility class DeviceQueueIndex, which encapsulates queueFamilyIndex and the queueIndex into one integer value so that we can pass around to barrier function. vk::Context and BufferHelper and ImageHelper class now keeps mCurrentDeviceQueueIndex instead of mCurrentQueueFamilyIndex. For All contexts by default it gets the default queue from renderer (which is always the one corresponding to Medium priority). For ContextVk, when priority changes it update mCurrentDeviceQueueIndex to match new context priority. Bug: b/337135577 Change-Id: I62cc483cfdb3e974d38db074e671c57299300074 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5555903 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao b22cce5f 2024-05-21T10:55:27 Vulkan: Remove Renderer::getDeviceQueueIndex Renderer::getDeviceQueueIndex() returns queueFamilyIndex. There is a function that already returns mCurrentQueueFamilyIndex, so this function is now removed. This CL also renames ImageHelper::isQueueChangeNeccesary to isQueueFamilyChangeNeccesary Bug: b/337135577 Change-Id: I3cd9ded1414d1389e162aaa5399c231a987f871e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5553067 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 9d124c35 2024-05-21T10:36:27 Vulkan: Store QueueIndex in DeviceQueueMap VkGetDeviceQueue call takes two indices: queueFamilyIndex and queueIndex. Right now DeviceQueueMap only stores queueFamilyIndex. This CL also stores queueIndex in the DeviceQueueMap. In later CL, we are going to expose this queueIndex to vk::Context and vk::ImageHelper along with queueFamilyIndex. In order to do it in a cleaner way, this CL mostly involves cleanup. Previously DeviceQueueMap is a subclass of angle::PackedEnumMap. In this CL, DeviceQueueMap has mQueueAndIndices data member that maps priority to devicePriority/queueIndex/VkQueue. Previously DeviceQueueMap was created in Renderer::createDeviceAndQueue() and then passed to CommandQueue::init(), which copies to mQueueMap. This CL removes the copy. It now calls mQueueMap.initialize() directly from CommandQueue::init(). This CL also cleans up relationship between QueueFamily and DeviceQueueMap. Before this CL, QueueFamily::initializeQueueMap() initialiazes DeviceQueueMap object. After this CL, that logic now moves to DeviceQueueMap::initialize(). QueueFamily no longer modifies DeviceQueueMap class. No functional change is expected. Bug: b/337135577 Change-Id: I3f96fb78aedc89d96d6235b060c88b769bdd1e24 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5553066 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao ea36ed34 2024-05-21T10:03:51 Vulkan: Rename mIndex to mQueueFamilyIndex In preparation for the later CLs that expose the VkQueue index to vk::Context, this CL renames mIndex to mQueueFamilyIndex so that we do not confused what *index* really means. No functional change expected. Bug: b/337135577 Change-Id: I6a089716a9586e9c404ec6c1d557a563dccf927c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5553086 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Roman Lavrov 073b7628 2024-05-21T21:49:37 Revert "Cleanup: replace DirtyObjectType check with constexpr generator" This reverts commit 89caa0e1d99e45f3d6f355f6e14c147f8de3e0e5. Reason for revert: compile errors on gcc and msvc c++17 Original change's description: > Cleanup: replace DirtyObjectType check with constexpr generator > > Static assert was meant to avoid kDirtyObjectHandlers getting out of > sync, but it doesn't achieve that goal as it's just comparing values > with ints which is confusing. > > Replacing with constexpr generated std::array. C++20 allows to easily > validate that all values are set by _not_ default-initializing > `handlers`. C++17 makes it trickier, addeded static_assert on an > additional static constexpr bool (silly but I can't find a more concise > way) > > Bug: angleproject:8666 > Bug: b/335295728 > Change-Id: Idf9bbd087d09d5ba253a7587ce0503cae3fcf3a7 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5478231 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Roman Lavrov <romanl@google.com> Bug: angleproject:8666 Bug: b/335295728 Change-Id: Ie272f09f0e21498848ac3ed6477dabf28aa3da42 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5554615 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi b8c64f3e 2024-05-21T15:34:26 Fix build on compilers that get confused with templates - part 2 Bug: angleproject:8667 Change-Id: I1db327643f0b16bea5dc59635ac51c2398fdedf6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5554174 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Charlie Lao e5fe13df 2024-05-20T11:03:49 Vulkan: Destroy VkEvent instead of putting into recycler VVL is complaining about SYNC-vkCmdSetEvent-missingbarrier-reset (See https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/8032). I am not sure if the way I did VkCmdResetEvent followed by VkCmdSetEvent is correct either. So destroy VkEvent instead of put it into recycler for now until I sort this out. Bug: b/336844257 Change-Id: I8baf87fa6f6e8c5ed9e2f7e0a29226caa85ebb31 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5549896 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 9ed415e5 2024-05-16T14:28:31 Vulkan: Clean up in ImageHelper::updateLayoutAndBarrier There was a duplicated pipelineBarrier wait in ImageHelper::updateLayoutAndBarrier that possibly come from bad code merge. It is removed in this CL. The check of hasEvent and subsequently call addAdditionalStageAccess has moved out of addMemoryEvent and make its own function so that it only affects the specific case where the image is used in different shader stage in the *same* render pass. Bug: b/336844257 Change-Id: I78b0c952be32124cb0fb6a2cf750df41f6c8259d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5544450 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi b257da86 2024-05-21T12:04:21 Fix build on compilers that get confused with templates Bug: angleproject:8667 Change-Id: Ie3d35b617ceb5bb6c0e13e0dfda370bbe18d888a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5554982 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Charlie Lao c4d266cc 2024-05-17T15:07:43 Vulkan: Use std::deque for EventBarrierArray::mBarriers Most time mBarriers is small, only ~1.5% time the vector size is greater than 4. So more complicated optimization for it may not worth it. In very rare time it could be over 100. But there is no need for storage to be continuous, so switch to std::deque here so that the overhead for occasionally large barrier array size won't be too bad. Bug: b/336844257 Bug: b/293297177 Change-Id: I79b91128a1a9e460b9687862f00fed51e4258511 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5545884 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yiwei Zhang a00babd8 2024-05-17T20:38:56 Vulkan: disable supportsShaderFramebufferFetchNonCoherent on Android Not just ARM or QC, but also Intel and AMD are impacted. So just disable this for Android as a whole since it's for app compat but not specific to a particular impl. Bug: b/340665604 Test: LIMBO, Diablo Immortal, Real Racing 3, etc are running properly Change-Id: Id11ad4cd541166c9e6c6d84bb09d9c06a175d5a1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5547687 Auto-Submit: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Lepton Wu <lepton@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Charlie Lao b4562086 2024-05-16T12:22:47 Vulkan: Remove std::vector from EventBarrier::mEvents mEvents and mImageMemoryBarriers field of EventBarrier never being more than 1. This CL removes std::vector and just store the handle. Similarly max count for mImageMemoryBarriers is 1, so std::vector also removed. mImageMemoryBarrierCount added (which can be either 0 or 1) to indicate if mImageMemoryBarrier is valid or nullptr should be send to VK driver. Bug: b/336844257 Change-Id: Ib367c649d3a9d790c5e15d4129cde6673bca6cae Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5545883 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>