Remove disable_direct_composition GPU workaround
The only workaround entry is for a bug that's likely related to video overlays rather than direct composition as a whole. The other linked bug doesn't even seem related to direct composition. However, we still need to disable direct composition for things like RenderDoc so (re)introduce the --disable-direct-composition command line flag. Bug: 41241478 Change-Id: Ibf4ce1aa5a6266a7459993c95f9d38697733aca8 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6324950 Reviewed-by: Rafael Cintron <rafael.cintron@microsoft.com> Commit-Queue: Sunny Sachanandani <sunnyps@chromium.org> Reviewed-by: David Yeung <dayeung@chromium.org> Auto-Submit: Sunny Sachanandani <sunnyps@chromium.org> Reviewed-by: Mitsuru Oshima <oshima@chromium.org> Cr-Commit-Position: refs/heads/main@{#1432806}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
b8833a89a0
commit
a149973062
components/viz/common
docs/gpu
gpu
config
ipc
service
ui
@ -39,6 +39,7 @@ specific_include_rules = {
|
||||
"+gpu/config/gpu_finch_features.h",
|
||||
"+gpu/config/gpu_switches.h",
|
||||
"+media/media_buildflags.h",
|
||||
"+ui/gl/gl_switches.h",
|
||||
],
|
||||
"bitmap_allocation.cc" : [
|
||||
# Only used to pass Mojo handles, not to communicate with the viz service.
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "gpu/config/gpu_finch_features.h"
|
||||
#include "gpu/config/gpu_switches.h"
|
||||
#include "media/media_buildflags.h"
|
||||
#include "ui/gl/gl_switches.h"
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
#include "base/android/build_info.h"
|
||||
@ -645,14 +646,11 @@ bool ShouldRemoveRedirectionBitmap() {
|
||||
// bitmap via a blit swap chain. DWM_SYSTEMBACKDROP_TYPE is only available
|
||||
// on Win11 22H2+, therefore limit the bitmap removal to those versions or
|
||||
// higher so that an appropriate background replacement is available.
|
||||
// Note: the DISABLE_DIRECT_COMPOSITION command line check is a workaround for
|
||||
// https://crbug.com/40276881. Additionally, Direct Composition is only
|
||||
// blocklisted for Windows 10 so this feature would not be enabled at the same
|
||||
// time.
|
||||
// Note: the disable-direct-composition command line check is a workaround for
|
||||
// https://crbug.com/40276881.
|
||||
return base::win::GetVersion() >= base::win::Version::WIN11_22H2 &&
|
||||
!base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||
gpu::GpuDriverBugWorkaroundTypeToString(
|
||||
gpu::DISABLE_DIRECT_COMPOSITION)) &&
|
||||
switches::kDisableDirectComposition) &&
|
||||
base::FeatureList::IsEnabled(kRemoveRedirectionBitmap);
|
||||
}
|
||||
#endif
|
||||
|
@ -28,13 +28,13 @@ Here are the steps to profile the WebGL application [Aquarium](https://webglsamp
|
||||
```
|
||||
cd C:\Program Files\IntelSWTools\GPA\Streams
|
||||
|
||||
gpa-injector.exe --injection-mode 1 -t "%LOCALAPPDATA%\Google\Chrome SxS\Application\chrome.exe" -L capture -L hud-layer -- --no-sandbox --disable_direct_composition=1 https://webglsamples.org/aquarium/aquarium.html
|
||||
gpa-injector.exe --injection-mode 1 -t "%LOCALAPPDATA%\Google\Chrome SxS\Application\chrome.exe" -L capture -L hud-layer -- --no-sandbox --disable-direct-composition https://webglsamples.org/aquarium/aquarium.html
|
||||
```
|
||||
|
||||
Note that
|
||||
- `-t` specifies the binary file of the graphics application.
|
||||
- `-L hud-layer` (optional) enables the HUD of Intel® GPA, where we can see some statistics (for example, the number of frames we have collected) of Intel® GPA.
|
||||
- `--` specifies the command line parameters that will be used when the graphics application is launched. Currently both `--no-sandbox` and `--disable_direct_composition=1` are required for the latest version of Intel® GPA to work with Chromium.
|
||||
- `--` specifies the command line parameters that will be used when the graphics application is launched. Currently both `--no-sandbox` and `--disable-direct-composition` are required for the latest version of Intel® GPA to work with Chromium.
|
||||
|
||||
2. Close Chrome to stop recording the stream after we have collected enough frames.
|
||||
|
||||
@ -58,7 +58,7 @@ gpa-injector.exe --injection-mode 1 --hook-d3d11on12 -t "C:\Program Files\Google
|
||||
|
||||
Note that
|
||||
- `--hook-d3d11on12` is required to profile WebGPU applications.
|
||||
- `--no-sandbox` and `--disable_direct_composition=1` are both required for the latest version of Intel® GPA to work with Chromium.
|
||||
- `--no-sandbox` and `--disable-direct-composition` are both required for the latest version of Intel® GPA to work with Chromium.
|
||||
|
||||
2. Close Chrome to stop recording the stream after we have collected enough frames.
|
||||
|
||||
|
@ -1712,7 +1712,7 @@
|
||||
},
|
||||
{
|
||||
"id": 300,
|
||||
"cr_bugs": [775898, 785648],
|
||||
"cr_bugs": [775898],
|
||||
"description": "Direct composition causes rendering issues on Intel SandyBridge and IvyBridge GPUs on early versions of RS3",
|
||||
"os": {
|
||||
"type" : "win",
|
||||
@ -1727,7 +1727,7 @@
|
||||
"ivybridge"
|
||||
],
|
||||
"features": [
|
||||
"disable_direct_composition"
|
||||
"disable_direct_composition_video_overlays"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -162,7 +162,7 @@ bool GetActiveAdapterLuid(LUID* luid) {
|
||||
|
||||
// This has to be called after a context is created, active GPU is identified,
|
||||
// and GPU driver bug workarounds are computed again. Otherwise the workaround
|
||||
// |disable_direct_composition| may not be correctly applied.
|
||||
// `disable_direct_composition_video_overlays` may not be correctly applied.
|
||||
// Also, this has to be called after falling back to SwiftShader decision is
|
||||
// finalized because this function depends on GL is ANGLE's GLES or not.
|
||||
void CollectHardwareOverlayInfo(OverlayInfo* overlay_info) {
|
||||
|
@ -316,7 +316,6 @@ void SetProcessGlWorkaroundsFromGpuFeatures(
|
||||
.disable_metal = is_enabled(DISABLE_METAL),
|
||||
.disable_es3gl_context = is_enabled(DISABLE_ES3_GL_CONTEXT),
|
||||
#if BUILDFLAG(IS_WIN)
|
||||
.disable_direct_composition = is_enabled(DISABLE_DIRECT_COMPOSITION),
|
||||
.disable_direct_composition_video_overlays =
|
||||
is_enabled(DISABLE_DIRECT_COMPOSITION_VIDEO_OVERLAYS),
|
||||
.disable_vp_auto_hdr = is_enabled(DISABLE_VP_AUTO_HDR),
|
||||
|
@ -24,7 +24,6 @@ disable_d3d11_video_decoder
|
||||
disable_d3d11_vp9_ksvc_decoding
|
||||
disable_decode_swap_chain
|
||||
disable_depth_texture
|
||||
disable_direct_composition
|
||||
disable_direct_composition_sw_video_overlays
|
||||
disable_direct_composition_video_overlays
|
||||
disable_discard_framebuffer
|
||||
|
@ -122,7 +122,7 @@ void InitializePlatformOverlaySettings(GPUInfo* gpu_info,
|
||||
#if BUILDFLAG(IS_WIN)
|
||||
// This has to be called after a context is created, active GPU is identified,
|
||||
// and GPU driver bug workarounds are computed again. Otherwise the workaround
|
||||
// |disable_direct_composition| may not be correctly applied.
|
||||
// `disable_direct_composition_video_overlays` may not be correctly applied.
|
||||
// Also, this has to be called after falling back to SwiftShader decision is
|
||||
// finalized because this function depends on GL is ANGLE's GLES or not.
|
||||
gl::DirectCompositionOverlayWorkarounds workarounds = {
|
||||
|
@ -253,7 +253,8 @@ int main(int argc, char** argv) {
|
||||
// Disabling Direct Composition works around the limitation that
|
||||
// InProcessContextFactory doesn't work with Direct Composition, causing the
|
||||
// window to not render. See http://crbug.com/936249.
|
||||
gl::SetGlWorkarounds(gl::GlWorkarounds{.disable_direct_composition = true});
|
||||
base::CommandLine::ForCurrentProcess()->AppendSwitch(
|
||||
switches::kDisableDirectComposition);
|
||||
|
||||
// The exit manager is in charge of calling the dtors of singleton objects.
|
||||
base::AtExitManager exit_manager;
|
||||
|
@ -669,7 +669,8 @@ void InitializeDirectComposition(
|
||||
return;
|
||||
}
|
||||
|
||||
if (GetGlWorkarounds().disable_direct_composition) {
|
||||
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||
switches::kDisableDirectComposition)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -56,12 +56,12 @@ GL_EXPORT ID3D11Device* GetDirectCompositionD3D11Device();
|
||||
// Returns true if direct composition is supported. We prefer to use direct
|
||||
// composition even without hardware overlays, because it allows us to bypass
|
||||
// blitting by DWM to the window redirection surface by using a flip mode swap
|
||||
// chain. Overridden with --disable_direct_composition=1.
|
||||
// chain. Overridden with --disable-direct-composition.
|
||||
GL_EXPORT bool DirectCompositionSupported();
|
||||
|
||||
// Returns true if video overlays are supported and should be used. Overridden
|
||||
// with --enable-direct-composition-video-overlays and
|
||||
// --disable_direct_composition_video_overlays=1. This function is thread safe.
|
||||
// --disable-direct-composition-video-overlays. This function is thread safe.
|
||||
GL_EXPORT bool DirectCompositionOverlaysSupported();
|
||||
|
||||
// Returns true if hardware overlays are supported. This function is thread
|
||||
|
@ -135,8 +135,10 @@ const char kDisableGLExtensions[] = "disable-gl-extensions";
|
||||
// Enables SwapBuffersWithBounds if it is supported.
|
||||
const char kEnableSwapBuffersWithBounds[] = "enable-swap-buffers-with-bounds";
|
||||
|
||||
// Enables using DirectComposition video overlays, even if hardware overlays
|
||||
// aren't supported.
|
||||
// Disable DirectComposition.
|
||||
const char kDisableDirectComposition[] = "disable-direct-composition";
|
||||
|
||||
// Enable DirectComposition video overlays even if hardware doesn't support it.
|
||||
const char kEnableDirectCompositionVideoOverlays[] =
|
||||
"enable-direct-composition-video-overlays";
|
||||
|
||||
@ -166,6 +168,7 @@ const char* const kGLSwitchesCopiedFromGpuProcessHost[] = {
|
||||
kOverrideUseSoftwareGLForTests,
|
||||
kUseANGLE,
|
||||
kEnableSwapBuffersWithBounds,
|
||||
kDisableDirectComposition,
|
||||
kEnableDirectCompositionVideoOverlays,
|
||||
kDirectCompositionVideoSwapChainFormat,
|
||||
kEnableUnsafeSwiftShader,
|
||||
|
@ -71,6 +71,7 @@ GL_EXPORT extern const char kUseGpuInTests[];
|
||||
GL_EXPORT extern const char kEnableSgiVideoSync[];
|
||||
GL_EXPORT extern const char kDisableGLExtensions[];
|
||||
GL_EXPORT extern const char kEnableSwapBuffersWithBounds[];
|
||||
GL_EXPORT extern const char kDisableDirectComposition[];
|
||||
GL_EXPORT extern const char kEnableDirectCompositionVideoOverlays[];
|
||||
GL_EXPORT extern const char kUseAdapterLuid[];
|
||||
GL_EXPORT extern const char kEnableUnsafeSwiftShader[];
|
||||
|
@ -46,7 +46,6 @@ struct GlWorkarounds {
|
||||
bool disable_metal = false;
|
||||
bool disable_es3gl_context = false;
|
||||
bool disable_es3gl_context_for_testing = false;
|
||||
bool disable_direct_composition = false;
|
||||
bool disable_direct_composition_video_overlays = false;
|
||||
bool disable_vp_auto_hdr = false;
|
||||
};
|
||||
|
@ -102,7 +102,7 @@ ExamplesExitCode ExamplesMainProc(bool under_test, ExampleVector examples) {
|
||||
// Disabling Direct Composition works around the limitation that
|
||||
// InProcessContextFactory doesn't work with Direct Composition, causing the
|
||||
// window to not render. See http://crbug.com/936249.
|
||||
gl::SetGlWorkarounds(gl::GlWorkarounds{.disable_direct_composition = true});
|
||||
command_line->AppendSwitch(switches::kDisableDirectComposition);
|
||||
|
||||
base::FeatureList::InitInstance(
|
||||
command_line->GetSwitchValueASCII(switches::kEnableFeatures),
|
||||
|
Reference in New Issue
Block a user