| // Copyright 2016 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. |
| |
| #ifndef GPU_CONFIG_GPU_PREFERENCES_H_ |
| #define GPU_CONFIG_GPU_PREFERENCES_H_ |
| |
| #include <stddef.h> |
| #include <string> |
| #include <vector> |
| |
| #include "build/build_config.h" |
| #include "build/chromeos_buildflags.h" |
| #include "gpu/gpu_export.h" |
| #include "media/media_buildflags.h" |
| #include "ui/gfx/buffer_types.h" |
| |
| #if defined(USE_OZONE) |
| #include "base/message_loop/message_pump_type.h" |
| #endif |
| |
| namespace gpu { |
| |
| // The size to set for the program cache for default and low-end device cases. |
| #if !BUILDFLAG(IS_ANDROID) |
| const size_t kDefaultMaxProgramCacheMemoryBytes = 6 * 1024 * 1024; |
| #else |
| const size_t kDefaultMaxProgramCacheMemoryBytes = 2 * 1024 * 1024; |
| const size_t kLowEndMaxProgramCacheMemoryBytes = 128 * 1024; |
| #endif |
| |
| enum class VulkanImplementationName : uint32_t { |
| kNone = 0, |
| kNative = 1, |
| kForcedNative = 2, // Cannot be overridden by GPU blocklist. |
| kSwiftshader = 3, |
| kLast = kSwiftshader, |
| }; |
| |
| enum class WebGPUAdapterName : uint32_t { |
| kDefault = 0, |
| kCompat = 1, |
| kSwiftShader = 2, |
| }; |
| |
| enum class GrContextType : uint32_t { |
| kGL = 0, |
| kVulkan = 1, |
| kMetal = 2, |
| kDawn = 3, |
| kLast = kDawn, |
| }; |
| |
| enum class DawnBackendValidationLevel : uint32_t { |
| kDisabled = 0, |
| kPartial = 1, |
| kFull = 2, |
| }; |
| |
| // NOTE: if you modify this structure then you must also modify the |
| // following two files to keep them in sync: |
| // src/gpu/ipc/common/gpu_preferences.mojom |
| // src/gpu/ipc/common/gpu_preferences_mojom_traits.h |
| struct GPU_EXPORT GpuPreferences { |
| public: |
| GpuPreferences(); |
| |
| GpuPreferences(const GpuPreferences& other); |
| |
| ~GpuPreferences(); |
| |
| // Encode struct into a string so it can be passed as a commandline switch. |
| std::string ToSwitchValue(); |
| |
| // Decode the encoded string back to GpuPrefences struct. |
| // If return false, |this| won't be touched. |
| bool FromSwitchValue(const std::string& data); |
| |
| // =================================== |
| // Settings from //content/public/common/content_switches.h |
| |
| // Disables hardware acceleration of video decode, where available. |
| bool disable_accelerated_video_decode = false; |
| |
| // Disables hardware acceleration of video encode, where available. |
| bool disable_accelerated_video_encode = false; |
| |
| // Causes the GPU process to display a dialog on launch. |
| bool gpu_startup_dialog = false; |
| |
| // Disable the thread that crashes the GPU process if it stops responding to |
| // messages. |
| bool disable_gpu_watchdog = false; |
| |
| // Starts the GPU sandbox before creating a GL context. |
| bool gpu_sandbox_start_early = false; |
| |
| // Enables using CODECAPI_AVLowLatencyMode. Windows only. |
| bool enable_low_latency_dxva = true; |
| |
| // Enables support for avoiding copying DXGI NV12 textures. Windows only. |
| bool enable_zero_copy_dxgi_video = false; |
| |
| // Enables support for outputting NV12 video frames. Windows only. |
| bool enable_nv12_dxgi_video = false; |
| |
| // Enables MediaFoundationVideoEncoderAccelerator on Windows 7. Windows 7 does |
| // not support some of the attributes which may impact the performance or the |
| // quality of output. So this flag is disabled by default. Windows only. |
| bool enable_media_foundation_vea_on_windows7 = false; |
| |
| // Disables the use of a 3D software rasterizer, for example, SwiftShader. |
| bool disable_software_rasterizer = false; |
| |
| bool log_gpu_control_list_decisions = false; |
| |
| // =================================== |
| // Settings from //gpu/command_buffer/service/gpu_switches.cc |
| |
| // Always return success when compiling a shader. Linking will still fail. |
| bool compile_shader_always_succeeds = false; |
| |
| // Disable the GL error log limit. |
| bool disable_gl_error_limit = false; |
| |
| // Disable the GLSL translator. |
| bool disable_glsl_translator = false; |
| |
| // Turn off user-defined name hashing in shaders. |
| bool disable_shader_name_hashing = false; |
| |
| // Turn on Logging GPU commands. |
| bool enable_gpu_command_logging = false; |
| |
| // Turn on Calling GL Error after every command. |
| bool enable_gpu_debugging = false; |
| |
| // Enable GPU service logging. |
| bool enable_gpu_service_logging_gpu = false; |
| |
| // Enable logging of GPU driver debug messages. |
| bool enable_gpu_driver_debug_logging = false; |
| |
| // Turn off gpu program caching |
| bool disable_gpu_program_cache = false; |
| |
| // Enforce GL minimums. |
| bool enforce_gl_minimums = false; |
| |
| // Sets the total amount of memory that may be allocated for GPU resources. |
| uint32_t force_gpu_mem_available_bytes = 0u; |
| |
| // Sets the maximum discardable cache size limit for GPU resources. |
| uint32_t force_gpu_mem_discardable_limit_bytes = 0u; |
| |
| // Sets maximum texture size. |
| uint32_t force_max_texture_size = 0u; |
| |
| // Sets the maximum size of the in-memory gpu program cache, in kb |
| uint32_t gpu_program_cache_size = kDefaultMaxProgramCacheMemoryBytes; |
| |
| // Disables the GPU shader on disk cache. |
| bool disable_gpu_shader_disk_cache = false; |
| |
| // Simulates shared textures when share groups are not available. |
| // Not available everywhere. |
| bool enable_threaded_texture_mailboxes = false; |
| |
| // Include ANGLE's intermediate representation (AST) output in shader |
| // compilation info logs. |
| bool gl_shader_interm_output = false; |
| |
| // =================================== |
| // Settings from //gpu/config/gpu_switches.h |
| |
| // Enables the use of SurfaceControl for overlays on Android. |
| bool enable_android_surface_control = false; |
| |
| // =================================== |
| // Settings from //ui/gl/gl_switches.h |
| |
| // Turns on GPU logging (debug build only). |
| bool enable_gpu_service_logging = false; |
| |
| // Turns on calling TRACE for every GL call. |
| bool enable_gpu_service_tracing = false; |
| |
| // Use the Pass-through command decoder, skipping all validation and state |
| // tracking. |
| bool use_passthrough_cmd_decoder = false; |
| |
| // Disable using a single multiplanar GpuMemoryBuffer to store biplanar |
| // VideoFrames (e.g. NV12), see https://crbug.com/791676. |
| bool disable_biplanar_gpu_memory_buffers_for_video_frames = false; |
| |
| // List of texture usage & formats that require use of a platform specific |
| // texture target. |
| std::vector<gfx::BufferUsageAndFormat> texture_target_exception_list; |
| |
| // =================================== |
| // Settings from //gpu/config/gpu_switches.h |
| |
| // Ignores GPU blocklist. |
| bool ignore_gpu_blocklist = false; |
| |
| // Start the watchdog suspended, as the app is already backgrounded and won't |
| // send a background/suspend signal. |
| bool watchdog_starts_backgrounded = false; |
| |
| // =================================== |
| // Settings from //gpu/command_buffer/service/gpu_switches.h |
| // The type of the GrContext. |
| GrContextType gr_context_type = GrContextType::kGL; |
| |
| // Use Vulkan for rasterization and display compositing. |
| VulkanImplementationName use_vulkan = VulkanImplementationName::kNone; |
| |
| // Enable using vulkan protected memory. |
| bool enable_vulkan_protected_memory = false; |
| |
| // Use vulkan VK_KHR_surface for presenting. |
| bool disable_vulkan_surface = false; |
| |
| // If Vulkan initialization has failed, do not fallback to GL. This is for |
| // testing in order to detect regressions which crash Vulkan. |
| bool disable_vulkan_fallback_to_gl_for_testing = false; |
| |
| // Heap memory limit for Vulkan. Allocations will fail when this limit is |
| // reached for a heap. |
| uint32_t vulkan_heap_memory_limit = 0u; |
| |
| // Sync CPU memory limit for Vulkan. Submission of GPU work will be |
| // synchronize with the CPU in order to free released memory immediately |
| // when this limit is reached. |
| uint32_t vulkan_sync_cpu_memory_limit = 0u; |
| |
| // Use Metal for rasterization and Skia-based display compositing. Note that |
| // this is compatible with GL-based display compositing. |
| bool enable_metal = false; |
| |
| // =================================== |
| // Settings from //cc/base/switches.h |
| // Enable the GPU benchmarking extension; used by tests only. |
| bool enable_gpu_benchmarking_extension = false; |
| |
| // Enable the WebGPU command buffer. |
| bool enable_webgpu = false; |
| |
| // Enable usage of unsafe WebGPU features. |
| bool enable_unsafe_webgpu = false; |
| |
| // Enable validation layers in Dawn backends. |
| DawnBackendValidationLevel enable_dawn_backend_validation = |
| DawnBackendValidationLevel::kDisabled; |
| |
| // The adapter to use for WebGPU content. |
| WebGPUAdapterName use_webgpu_adapter = WebGPUAdapterName::kDefault; |
| |
| // The Dawn features(toggles) enabled on the creation of Dawn devices. |
| std::vector<std::string> enabled_dawn_features_list; |
| |
| // The Dawn features(toggles) disabled on the creation of Dawn devices. |
| std::vector<std::string> disabled_dawn_features_list; |
| |
| // Enable measuring blocked time on GPU Main thread |
| bool enable_gpu_blocked_time_metric = false; |
| |
| // Enable collecting perf data for device categorization purpose. Currently |
| // only enabled on Windows platform for the info collection GPU process. |
| bool enable_perf_data_collection = false; |
| |
| #if defined(USE_OZONE) |
| // Determines message pump type for the GPU thread. |
| base::MessagePumpType message_pump_type = base::MessagePumpType::DEFAULT; |
| #endif |
| |
| // =================================== |
| // Settings from //ui/gfx/switches.h |
| |
| // Enable native CPU-mappable GPU memory buffer support on Linux. |
| bool enable_native_gpu_memory_buffers = false; |
| |
| // =================================== |
| // Settings from //media/base/media_switches.h |
| |
| #if BUILDFLAG(IS_CHROMEOS) |
| // Enable the hardware-accelerated direct video decoder on ChromeOS. |
| bool enable_chromeos_direct_video_decoder = false; |
| #endif |
| |
| // Disables oppr debug crash dumps. |
| bool disable_oopr_debug_crash_dump = false; |
| |
| // Please update gpu_preferences_unittest.cc when making additions or |
| // changes to this struct. |
| }; |
| |
| } // namespace gpu |
| |
| #endif // GPU_CONFIG_GPU_PREFERENCES_H_ |