Hash :
1365f5b3
Author :
Date :
2022-09-09T17:19:26
Vulkan: Fix Swapchain Acquire Image Semaphore wait stage flags.
There is a screen tearing on G996B with single
"glClear(GL_COLOR_BUFFER_BIT)" no scissor in the frame.
Fixed by defining "kSwapchainAcquireImageWaitStageFlags" and
adding "VK_PIPELINE_STAGE_TRANSFER_BIT" stage flag.
Also added "VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT" stage, because first
use of the Swapchain Image after Acquire may be in the
"glBlitFramebuffer()" command.
This fix may slightly affect performance. In such case, a better fix
should be implemented (include only stages based on the actual first
use). However, this may be not trivial.
Additionally, "kSwapchainAcquireImageWaitStageFlags" is used as a source
stage mask in the "ImageLayout::Present" pipeline barrier. This is
needed in order to build a dependency chain from the Acquire Image
Semaphore to the layout transition's first synchronization scope, so
that layout transition happens after acquire semaphore is signaled.
Reference:
https://github.com/KhronosGroup/Vulkan-Docs/wiki/Synchronization-Examples#combined-graphicspresent-queue
https://vulkan-tutorial.com/Drawing_a_triangle/Drawing/Rendering_and_presentation
Alternative fix of both issues is to define:
kSwapchainAcquireImageWaitStageFlags = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT
This might potentially delay command buffer execution relative to the
Swapchain Acquire Image Semaphore signal operations, but will relax
the pipeline barrier.
Bug: angleproject:8030
Test: angle_end2end_tests --gtest_also_run_disabled_tests --gtest_filter=EGLSurfaceTest.DISABLED_RandomClearTearing*
Change-Id: I29f58862c4b369524b2555dd944e2fb67eebe956
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4271377
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
This folder contains shared back-end-specific implementation files. The classes
and types in renderer are not specified by GLES. They instead are common to
all the various ANGLE implementations.
See renderer_utils.h for various cross back-end utilties.
The ANGLE format class, angle::Format, works as a union
between GLES and all the various back-end formats. It can represent any type
of format in ANGLE. e.g. Formats in Vulkan that don’t exist in GLES, or DXGI
formats that don’t exist in GLES, or Windows/Android surface configs that
don’t exist anywhere else.
The glInternalFormat member of angle::Format represents the “closest” GL
format for an ANGLE format. For formats that don’t exist in GLES this will
not be exactly what the format represents.
The back-ends also define their own format tables. See the Vulkan Format table docs and the [D3D11 format table docs][D23D11FormatDocs].
DXGI formats are used in both the GL and D3D11 back-end. Therefore the generated info table lives in this common shared location.
The DXGI info table is generated by gen_dxgi_format_table.py
and sources data from dxgi_format_data.json. The
main purpose of the table is to convert from a DXGI format to an ANGLE
format, where the ANGLE format should have all the necessary information.