| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/gl/gl_switches.h" |
| |
| #include "base/stl_util.h" |
| |
| namespace gl { |
| |
| const char kGLImplementationDesktopName[] = "desktop"; |
| const char kGLImplementationAppleName[] = "apple"; |
| const char kGLImplementationEGLName[] = "egl"; |
| const char kGLImplementationANGLEName[] = "angle"; |
| const char kGLImplementationSwiftShaderName[] = "swiftshader"; |
| const char kGLImplementationSwiftShaderForWebGLName[] = "swiftshader-webgl"; |
| const char kGLImplementationMockName[] = "mock"; |
| const char kGLImplementationStubName[] = "stub"; |
| const char kGLImplementationDisabledName[] = "disabled"; |
| |
| const char kANGLEImplementationDefaultName[] = "default"; |
| const char kANGLEImplementationD3D9Name[] = "d3d9"; |
| const char kANGLEImplementationD3D11Name[] = "d3d11"; |
| const char kANGLEImplementationD3D11on12Name[] = "d3d11on12"; |
| const char kANGLEImplementationOpenGLName[] = "gl"; |
| const char kANGLEImplementationOpenGLEGLName[] = "gl-egl"; |
| const char kANGLEImplementationOpenGLESName[] = "gles"; |
| const char kANGLEImplementationOpenGLESEGLName[] = "gles-egl"; |
| const char kANGLEImplementationNullName[] = "null"; |
| const char kANGLEImplementationVulkanName[] = "vulkan"; |
| const char kANGLEImplementationSwiftShaderName[] = "swiftshader"; |
| const char kANGLEImplementationMetalName[] = "metal"; |
| |
| // Special switches for "NULL"/stub driver implementations. |
| const char kANGLEImplementationD3D11NULLName[] = "d3d11-null"; |
| const char kANGLEImplementationOpenGLNULLName[] = "gl-null"; |
| const char kANGLEImplementationOpenGLESNULLName[] = "gles-null"; |
| const char kANGLEImplementationVulkanNULLName[] = "vulkan-null"; |
| const char kANGLEImplementationMetalNULLName[] = "metal-null"; |
| |
| // The command decoder names that can be passed to --use-cmd-decoder. |
| const char kCmdDecoderValidatingName[] = "validating"; |
| const char kCmdDecoderPassthroughName[] = "passthrough"; |
| |
| } // namespace gl |
| |
| namespace switches { |
| |
| // Disables use of D3D11. |
| const char kDisableD3D11[] = "disable-d3d11"; |
| |
| // Disables use of ES3 backend (use ES2 backend instead). |
| const char kDisableES3GLContext[] = "disable-es3-gl-context"; |
| |
| // Disables use of ES3 backend at a lower level, for testing purposes. |
| // This isn't guaranteed to work everywhere, so it's test-only. |
| const char kDisableES3GLContextForTesting[] = |
| "disable-es3-gl-context-for-testing"; |
| |
| // Disable workarounds for various GPU driver bugs. |
| const char kDisableGpuDriverBugWorkarounds[] = |
| "disable-gpu-driver-bug-workarounds"; |
| |
| // Stop the GPU from synchronizing presentation with vblank. |
| const char kDisableGpuVsync[] = "disable-gpu-vsync"; |
| |
| // Turns on GPU logging (debug build only). |
| const char kEnableGPUServiceLogging[] = "enable-gpu-service-logging"; |
| |
| // Turns on calling TRACE for every GL call. |
| const char kEnableGPUServiceTracing[] = "enable-gpu-service-tracing"; |
| |
| // Select which ANGLE backend to use. Options are: |
| // default: Attempts several ANGLE renderers until one successfully |
| // initializes, varying ES support by platform. |
| // d3d9: Legacy D3D9 renderer, ES2 only. |
| // d3d11: D3D11 renderer, ES2 and ES3. |
| // warp: D3D11 renderer using software rasterization, ES2 and ES3. |
| // gl: Desktop GL renderer, ES2 and ES3. |
| // gles: GLES renderer, ES2 and ES3. |
| const char kUseANGLE[] = "use-angle"; |
| |
| // Use the Pass-through command decoder, skipping all validation and state |
| // tracking. Switch lives in ui/gl because it affects the GL binding |
| // initialization on platforms that would otherwise not default to using |
| // EGL bindings. |
| const char kUseCmdDecoder[] = "use-cmd-decoder"; |
| |
| // ANGLE features are defined per-backend in third_party/angle/include/platform |
| // Enables specified comma separated ANGLE features if found. |
| const char kEnableANGLEFeatures[] = "enable-angle-features"; |
| // Disables specified comma separated ANGLE features if found. |
| const char kDisableANGLEFeatures[] = "disable-angle-features"; |
| |
| // Select which implementation of GL the GPU process should use. Options are: |
| // desktop: whatever desktop OpenGL the user has installed (Linux and Mac |
| // default). |
| // egl: whatever EGL / GLES2 the user has installed (Windows default - actually |
| // ANGLE). |
| // swiftshader: The SwiftShader software renderer. |
| const char kUseGL[] = "use-gl"; |
| |
| // Inform Chrome that a GPU context will not be lost in power saving mode, |
| // screen saving mode, etc. Note that this flag does not ensure that a GPU |
| // context will never be lost in any situations, say, a GPU reset. |
| const char kGpuNoContextLost[] = "gpu-no-context-lost"; |
| |
| // Flag used for Linux tests: for desktop GL bindings, try to load this GL |
| // library first, but fall back to regular library if loading fails. |
| const char kTestGLLib[] = "test-gl-lib"; |
| |
| // Use hardware gpu, if available, for tests. |
| const char kUseGpuInTests[] = "use-gpu-in-tests"; |
| |
| // Enable use of the SGI_video_sync extension, which can have |
| // driver/sandbox/window manager compatibility issues. |
| const char kEnableSgiVideoSync[] = "enable-sgi-video-sync"; |
| |
| // Disables GL drawing operations which produce pixel output. With this |
| // the GL output will not be correct but tests will run faster. |
| const char kDisableGLDrawingForTests[] = "disable-gl-drawing-for-tests"; |
| |
| // Forces the use of software GL instead of hardware gpu. |
| const char kOverrideUseSoftwareGLForTests[] = |
| "override-use-software-gl-for-tests"; |
| |
| // Disables specified comma separated GL Extensions if found. |
| const char kDisableGLExtensions[] = "disable-gl-extensions"; |
| |
| // Enables SwapBuffersWithBounds if it is supported. |
| const char kEnableSwapBuffersWithBounds[] = "enable-swap-buffers-with-bounds"; |
| |
| // Disables DirectComposition surface. |
| const char kDisableDirectComposition[] = "disable-direct-composition"; |
| |
| // Enables using DirectComposition video overlays, even if hardware overlays |
| // aren't supported. |
| const char kEnableDirectCompositionVideoOverlays[] = |
| "enable-direct-composition-video-overlays"; |
| |
| // Disables using DirectComposition video overlays, even if hardware overlays |
| // are supported. |
| const char kDisableDirectCompositionVideoOverlays[] = |
| "disable-direct-composition-video-overlays"; |
| |
| // Initialize the GPU process using the adapter with the specified LUID. This is |
| // only used on Windows, as LUID is a Windows specific structure. |
| const char kUseAdapterLuid[] = "use-adapter-luid"; |
| |
| // Enable kDirectCompositionForceFullDamage feature regardless of overlay |
| // support. |
| const char kDirectCompositionForceFullDamageForTesting[] = |
| "direct-composition-force-full-damage-for-testing"; |
| |
| // This is the list of switches passed from this file that are passed from the |
| // GpuProcessHost to the GPU Process. Add your switch to this list if you need |
| // to read it in the GPU process, else don't add it. |
| const char* const kGLSwitchesCopiedFromGpuProcessHost[] = { |
| kDisableGpuDriverBugWorkarounds, |
| kDisableGpuVsync, |
| kDisableD3D11, |
| kDisableES3GLContext, |
| kDisableES3GLContextForTesting, |
| kEnableGPUServiceLogging, |
| kEnableGPUServiceTracing, |
| kEnableSgiVideoSync, |
| kGpuNoContextLost, |
| kDisableGLDrawingForTests, |
| kOverrideUseSoftwareGLForTests, |
| kUseANGLE, |
| kEnableSwapBuffersWithBounds, |
| kDisableDirectComposition, |
| kEnableDirectCompositionVideoOverlays, |
| kDisableDirectCompositionVideoOverlays, |
| kDirectCompositionForceFullDamageForTesting, |
| }; |
| const int kGLSwitchesCopiedFromGpuProcessHostNumSwitches = |
| base::size(kGLSwitchesCopiedFromGpuProcessHost); |
| |
| } // namespace switches |
| |
| namespace features { |
| |
| // Forces Chrome's main backbuffer to full damage if the actual damage |
| // is large enough and allows DWM to consider the main backbuffer as an |
| // an overlay candidate. |
| const base::Feature kDirectCompositionForceFullDamage{ |
| "DirectCompositionForceFullDamage", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Use presentation feedback event queries (must be enabled) to limit latency. |
| const base::Feature kDirectCompositionLowLatencyPresentation{ |
| "DirectCompositionLowLatencyPresentation", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Overrides preferred overlay format to NV12 instead of YUY2. |
| const base::Feature kDirectCompositionPreferNV12Overlays{ |
| "DirectCompositionPreferNV12Overlays", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Allow overlay swapchain to present on all GPUs even if they only support |
| // software overlays. |
| const base::Feature kDirectCompositionSoftwareOverlays{ |
| "DirectCompositionSoftwareOverlays", base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Allow putting a video swapchain underneath the main swapchain, so overlays |
| // can be used even if there are controls on top of the video. It can be |
| // enabled only when overlay is supported. |
| const base::Feature kDirectCompositionUnderlays{ |
| "DirectCompositionUnderlays", base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Use decode swap chain created from compatible video decoder buffers. |
| const base::Feature kDirectCompositionUseNV12DecodeSwapChain{ |
| "DirectCompositionUseNV12DecodeSwapChain", |
| base::FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Default to using ANGLE's OpenGL backend |
| const base::Feature kDefaultANGLEOpenGL{"DefaultANGLEOpenGL", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Default to using ANGLE's Metal backend. |
| const base::Feature kDefaultANGLEMetal{"DefaultANGLEMetal", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| // Track current program's shaders at glUseProgram() call for crash report |
| // purpose. Only effective on Windows because the attached shaders may only |
| // be reliably retrieved with ANGLE backend. |
| const base::Feature kTrackCurrentShaders{"TrackCurrentShaders", |
| base::FEATURE_DISABLED_BY_DEFAULT}; |
| |
| } // namespace features |