|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
7cbac5de
|
2024-05-16T10:01:41
|
|
Vulkan: Switch RefCountedEventCollector to use std::deque
Right now it is using std::vector. The vector could potentially grow
big. The grow is costly with vector when storage has to resize. This CL
switches it to use std::deque.
Bug: b/293297177
Bug: b/336844257
Change-Id: Ia407e7d4e1b68bd0cb7cf76ccc5e7523c0e83415
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5545882
Reviewed-by: Roman Lavrov <romanl@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
f82d812d
|
2024-05-16T15:46:05
|
|
Vulkan: Fix EventBarrier bug when asyncSubmission is enabled
Since we have moved RefCountedEvent garbage collection into
ShareGroupVk, we have changed the reference counting to use non-atomic.
There is a bug with async submission code path where the
executeSetEvents gets called from submission thread which does not have
share group lock. This CL fixes this bug by storing VkEvent in
RenderPassCommandBufferHelper so that executeSetEvents uses VkEvent
instead of RefCountedEvent when async submission is enabled.
This CL also adds assertion that RefCountedEvent::releaseImpl does not
get called from async submission thread.
Bug: b/336844257
Change-Id: Ifcbd5a09d2bc7636cc15b2c6728dbbca103d4d9c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5544449
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
2d0e92ee
|
2024-05-16T09:36:44
|
|
Vulkan: Let Recycler class use std::deque instead of vector
Vector is expensive when storage has to be expanded. The Recycler only
use the storage as a stack operation, there is no requirements of
storage being continuous, thus deque works perfectly.
Bug: b/293297177
Change-Id: I89f02b4a7e7f356942bb6606e3d38dcbdcc8bb4d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5545881
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Roman Lavrov <romanl@google.com>
|
|
b71fe1c5
|
2024-05-16T15:10:09
|
|
Flatten vulkan-deps.
Sub-repos will be now checked out in third_party directly,
instead of under third_party/vulkan-deps.
Bug: chromium:341002187
Change-Id: Ia1c10ce5e7865c164b29bdcabb6ab8a7e4ae35b7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5545577
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Roman Lavrov <romanl@google.com>
Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
|
|
7ac85733
|
2024-05-15T15:06:31
|
|
Vulkan: Enable advanced blend emulation on Intel/Linux
Only Intel/windows drivers miss the required functionality.
Bug: angleproject:3586
Change-Id: I53eeb100c7ac7ee469e0bb35c19ae42d21f79ed2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5539019
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
8884cf06
|
2024-05-09T11:21:38
|
|
Vulkan: Use QueueSerial to track RefCountedEvent garbage
RefCountedEvent garbage are only used on one command buffer, so it is a
single QueueSerial is enough to track it.
Bug: b/336844257
Change-Id: Icafeee722fe19f41dd863a2e6aca6ddd981d28a4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5529952
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
4629bf6c
|
2024-05-08T17:43:59
|
|
Vulkan: Move RefCountedEvent GC and recycler to ShareGroupVk (3/3)
With previous CLs, RefCountedEvents are increment/decrement only within
contexts in the same ShareGroup, thus we no longer needs atomic
operation. This CL switchs RefCountedEvent to use RefCounted instead of
AtomicRefCounted.
Bug: b/336844257
Change-Id: Ic5aa9b0f28b8f817f820f595d3de945ce37dbd0e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5527617
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
44db69ab
|
2024-05-06T17:12:17
|
|
Add Qualcomm version with fixed CmdClearAttachment
* Added QualcommDriverVersion (angle::VersionTriple) to make comparing
versions more clear.
* Added ParseGenericVulkanDriverVersion() to parse the version of
drivers using the generic Vulkan format.
* Updated the condition for the following feature to no longer apply
to more recent drivers.
* preferDrawClearOverVkCmdClearAttachments
Bug: b/339054824
Change-Id: I0016c6c19ef1606b7c9475d684d98134494d8524
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5514933
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
0636b509
|
2024-05-06T12:36:20
|
|
Vulkan: Move RefCountedEvent GC and recycler to ShareGroupVk (2/3)
One of the problem we had with RefCountedEvents is CPU overhead comes
with it, and some part of the CPU overhead is due to atomic reference
counting. The RefCountedEvents are only used by ImageHelper and
ImageHelpers are per share group, so they are already protected by front
end context share lock. The only reason we needs atomic here is due to
garbage cleanup, which runs in separate thread and will decrement the
refCount. The idea is to move that garbage list from RendererVk to
ShareGroupVk so that access of RefCountedEvents are all protected
already, thus we can remove the use of atomic. The down side with this
approach is that a share group will hold onto its event garbage and not
available for other context to reuse. But VkEvents are expected to be
very light weighted objects, so that should be acceptable.
This is the second CL in the series. In this CL, we added
RefCountedEventsGarbageRecycler to the ShareGroupVk which is responsible
to garbage collect and recycle RefCountedEvent. Since most of
ImageHelper code have only access to Context argument, for convenience
we also stored the RefCountedEventsGarbageRecycler pointer in the
vk::Context for easy access. vk::Context argument is also passed to
RefCounteEvent::init and release function so that it has access to the
recycler. The garbage collection happens when RefCountedEvent is needed.
The per renderer recycler is still kept to hold the RefCounteEvents that
gets released from ShareGroupVk or when it is released without access to
context information.
Bug: b/336844257
Change-Id: I36fe5d1c8dacdbe35bb2d380f94a32b9b72bbaa5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5529951
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
2e0aefe9
|
2024-05-06T11:03:19
|
|
Vulkan: Move RefCountedEvent GC and recycler to ShareGroupVk (1/3)
One of the problem we had with RefCountedEvents is CPU overhead comes
with it, and some part of the CPU overhead is due to atomic reference
counting. The RefCountedEvents are only used by ImageHelper and
ImageHelpers are per share group, so they are already protected by front
end context share lock. The only reason we needs atomic here is due to
garbage cleanup, which runs in separate thread and will decrement the
refCount. The idea is to move that garbage list from RendererVk to
ShareGroupVk so that access of RefCountedEvents are all protected
already, thus we can remove the use of atomic. The down side with this
approach is that a share group will hold onto its event garbage and not
available for other context to reuse. But VkEvents are expected to be
very light weighted objects, so that should be acceptable (If not, we
can add some limit to the number of events it can hold in the garbage
list).
This is the first CL in the series. Before this CL, the RefCounteEvents
are garbage collected at flushToPrimrary time, at which time we have
lost ContextVk information. In order for us to do garbage collect to
ShareGroupVk, we need to move the garbage collection process early,
before command buffers leaving ContextVk's visibility. For
OutsideRenderPassCommands, this is easy to do, we just call
flushSetEvents before we call mRenderer->flushRenderPassCommands. For
RenderPassCommands, that flushSetEvents call will simply make another
copy of RefCountedEvents and add to the garbage list and the actual
VkCmdSetEvents are defered at the executeSetEvents call that get called
from flushToPrimrary time.
Bug: b/336844257
Change-Id: I1948cd8240ff61d407931083b7584a54b1dc6b0d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5517891
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d0bdec30
|
2024-05-13T18:11:17
|
|
EGL: Handle null resultOut for sync tail call destruction
Syncs can be destroyed during eglDestroySync or as part of display
destruction. During display distruction there is no result so
swallow any errors.
Bug: angleproject:8434
Change-Id: I172d268c91fd0d6ba534eceff8914f9c719bdf39
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5533777
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
5332ab8c
|
2024-05-10T19:48:34
|
|
Vulkan: Add RefCountedEventRecycler to vk::Renderer
This CL adds event recycler in vk::Renderer to avoid the constant create
and destroy of VkEvents. When RefCountedEvent is destroyed previously,
it now goes into per renderer recycler. When RefCountedEvent is created
previously, it now dips into this recycler and fetch it. Before we issue
VkCmdSetEvent, if this event was from recycler, we also issue
VkCmdResetEvent before VkCmdSetEvebt. When glFinish/EGLSwapBuffer is
called or context gets destroyed, this recycler is purged to keep the
free count under limit.
Bug: b/336844257
Change-Id: I92ec1b183f708112a96c3d06fcfa265024f5aa04
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5519174
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
0ac0603e
|
2024-05-14T00:00:00
|
|
Fold nested std::max calls
When a maximum of three values is needed,
an initializer list with all three values
is more readable than two std::max calls.
Fixed: angleproject:8695
Change-Id: I073ea1af07b215610c85981eea03f6e73107bce6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5541974
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
df2e7bd7
|
2024-05-10T19:48:34
|
|
Vulkan: Handle the case that VkEvent failed to create.
If VkEvent failed to create, we can still fall back to pipeline barrier.
This CL changes RefCountedEvent::init to return boolean. Also when it
fail, this CL did an immediate garbage clean up in case it will free up
more event from garbage list and then retry again.
Bug: b/336844257
Change-Id: I28251849a92d1785701c55eb028a8fed63cfc372
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5532869
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
|
|
0044f4d1
|
2024-05-13T00:29:30
|
|
Metal: fix IOSurface's render targets invalidated by max level change.
This CL fixes a bug in the following tricky situation:
- Client binds an IOSurface to a texture.
- Previously this would internally intialize the texture's max level
to the default value 1000.
- Client changes the texture's max level to 0.
- Client attachs the texture to FBO 1.
- Client binds FBO 1 and clear it.
- This triggers TextureMtl::getAttachmentRenderTarget() that
initializes the RenderTargetMtl of the texture.
- Client binds FBO 0 and sample the texture.
- Previously this could trigger TextureMtl::onBaseMaxLevelsChanged()
which would invalidate the texture's RenderTargetMtl.
- Client binds FBO 1.
- Client blits FBO 0 to FBO 1.
- This will set DIRTY_BIT_COLOR_BUFFER_CONTENTS_0 in FBO 1.
- Client calls glFlush to restart render command encoder.
- Client issues a draw call.
- DIRTY_BIT_COLOR_BUFFER_CONTENTS_0 would cause FrameBufferMtl to
re-initialize RenderPassDesc from invalid RenderTargetMtl.
- A new render encoder would be created from the invalid
RenderPassDesc.
- the draw call would be encoded to a render command encoder without
any valid color attachment.
The fix in this CL is that when we bind an IOSurface to a texture, the
texture's max level will be automatically set to 0. This will avoid its
RenderTargetMtl from being invalidated if users explicitly change the
max level to 0 in future.
Note: this is not a foolproof fix for every scenario concerning the
base/max level in IOSurface bound/or immutable textures. We will fix
them in future CLs.
Bug: b/335353385
Change-Id: I3a2da6991764f22393178f40c1d7bbe60503cba4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5531388
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
|