Commit 9b7d2ee6 authored by Peng Huang's avatar Peng Huang Committed by Commit Bot

Add vulkan feature on about gpu page.

This CL does two things:

1) exposes if Vulkan is enabled on chrome://gpu

2) adds vulkan feature which can be disabled by
gpu/config/software_rendering_list.json file based on environment.

Bug: 1002166,887018
Change-Id: Iee4b4e38e5e3761aeba1530a0d64d128f5aa9ae8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1832293Reviewed-by: default avatarJonathan Backer <backer@chromium.org>
Commit-Queue: Peng Huang <penghuang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#702166}
parent 2623e05c
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "content/browser/gpu/gpu_process_host.h" #include "content/browser/gpu/gpu_process_host.h"
#include "content/public/common/content_features.h" #include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h" #include "content/public/common/content_switches.h"
#include "gpu/command_buffer/service/gpu_switches.h"
#include "gpu/config/gpu_blocklist.h" #include "gpu/config/gpu_blocklist.h"
#include "gpu/config/gpu_driver_bug_list.h" #include "gpu/config/gpu_driver_bug_list.h"
#include "gpu/config/gpu_driver_bug_workaround_type.h" #include "gpu/config/gpu_driver_bug_workaround_type.h"
...@@ -34,6 +35,7 @@ ...@@ -34,6 +35,7 @@
#include "gpu/config/gpu_finch_features.h" #include "gpu/config/gpu_finch_features.h"
#include "gpu/config/gpu_switches.h" #include "gpu/config/gpu_switches.h"
#include "gpu/ipc/host/gpu_memory_buffer_support.h" #include "gpu/ipc/host/gpu_memory_buffer_support.h"
#include "gpu/vulkan/buildflags.h"
#include "media/media_buildflags.h" #include "media/media_buildflags.h"
#include "ui/gl/gl_switches.h" #include "ui/gl/gl_switches.h"
...@@ -179,6 +181,13 @@ const GpuFeatureData GetGpuFeatureData( ...@@ -179,6 +181,13 @@ const GpuFeatureData GetGpuFeatureData(
SafeGetFeatureStatus(gpu_feature_info, gpu::GPU_FEATURE_TYPE_METAL), SafeGetFeatureStatus(gpu_feature_info, gpu::GPU_FEATURE_TYPE_METAL),
!base::FeatureList::IsEnabled(features::kMetal) /* disabled */, !base::FeatureList::IsEnabled(features::kMetal) /* disabled */,
DisableInfo::NotProblem(), false /* fallback_to_software */}, DisableInfo::NotProblem(), false /* fallback_to_software */},
#endif
#if BUILDFLAG(ENABLE_VULKAN)
{"vulkan",
SafeGetFeatureStatus(gpu_feature_info, gpu::GPU_FEATURE_TYPE_VULKAN),
!base::FeatureList::IsEnabled(features::kVulkan) &&
!command_line.HasSwitch(switches::kUseVulkan) /* disabled */,
DisableInfo::NotProblem(), false /* fallback_to_software */},
#endif #endif
{"multiple_raster_threads", gpu::kGpuFeatureStatusEnabled, {"multiple_raster_threads", gpu::kGpuFeatureStatusEnabled,
NumberOfRendererRasterThreads() == 1, NumberOfRendererRasterThreads() == 1,
...@@ -267,6 +276,7 @@ std::unique_ptr<base::DictionaryValue> GetFeatureStatusImpl( ...@@ -267,6 +276,7 @@ std::unique_ptr<base::DictionaryValue> GetFeatureStatusImpl(
status += "_on"; status += "_on";
} }
if (gpu_feature_data.name == "metal" || if (gpu_feature_data.name == "metal" ||
gpu_feature_data.name == "vulkan" ||
gpu_feature_data.name == "surface_control") { gpu_feature_data.name == "surface_control") {
status += "_on"; status += "_on";
} }
......
...@@ -241,6 +241,7 @@ cr.define('gpu', function() { ...@@ -241,6 +241,7 @@ cr.define('gpu', function() {
'rasterization': 'Rasterization', 'rasterization': 'Rasterization',
'oop_rasterization': 'Out-of-process Rasterization', 'oop_rasterization': 'Out-of-process Rasterization',
'metal': 'Metal', 'metal': 'Metal',
'vulkan': 'Vulkan',
'multiple_raster_threads': 'Multiple Raster Threads', 'multiple_raster_threads': 'Multiple Raster Threads',
'native_gpu_memory_buffers': 'Native GpuMemoryBuffers', 'native_gpu_memory_buffers': 'Native GpuMemoryBuffers',
'protected_video_decode': 'Hardware Protected Video Decode', 'protected_video_decode': 'Hardware Protected Video Decode',
......
...@@ -157,6 +157,7 @@ jumbo_source_set("config_sources") { ...@@ -157,6 +157,7 @@ jumbo_source_set("config_sources") {
"//base", "//base",
"//build:branding_buildflags", "//build:branding_buildflags",
"//gpu/ipc/common:gpu_preferences_interface", "//gpu/ipc/common:gpu_preferences_interface",
"//gpu/vulkan:buildflags",
"//media:media_buildflags", "//media:media_buildflags",
"//third_party/re2", "//third_party/re2",
"//ui/gl", "//ui/gl",
......
...@@ -48,6 +48,7 @@ std::unique_ptr<GpuBlocklist> GpuBlocklist::Create( ...@@ -48,6 +48,7 @@ std::unique_ptr<GpuBlocklist> GpuBlocklist::Create(
list->AddSupportedFeature("android_surface_control", list->AddSupportedFeature("android_surface_control",
GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL); GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL);
list->AddSupportedFeature("metal", GPU_FEATURE_TYPE_METAL); list->AddSupportedFeature("metal", GPU_FEATURE_TYPE_METAL);
list->AddSupportedFeature("vulkan", GPU_FEATURE_TYPE_VULKAN);
return list; return list;
} }
......
...@@ -24,6 +24,7 @@ enum GpuFeatureType { ...@@ -24,6 +24,7 @@ enum GpuFeatureType {
GPU_FEATURE_TYPE_OOP_RASTERIZATION, GPU_FEATURE_TYPE_OOP_RASTERIZATION,
GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL, GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL,
GPU_FEATURE_TYPE_METAL, GPU_FEATURE_TYPE_METAL,
GPU_FEATURE_TYPE_VULKAN,
NUMBER_OF_GPU_FEATURE_TYPES NUMBER_OF_GPU_FEATURE_TYPES
}; };
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "gpu/config/gpu_info_collector.h" #include "gpu/config/gpu_info_collector.h"
#include "gpu/config/gpu_preferences.h" #include "gpu/config/gpu_preferences.h"
#include "gpu/config/gpu_switches.h" #include "gpu/config/gpu_switches.h"
#include "gpu/vulkan/buildflags.h"
#include "ui/gfx/extension_set.h" #include "ui/gfx/extension_set.h"
#include "ui/gl/buildflags.h" #include "ui/gl/buildflags.h"
#include "ui/gl/gl_switches.h" #include "ui/gl/gl_switches.h"
...@@ -72,6 +73,22 @@ GpuFeatureStatus GetMetalFeatureStatus( ...@@ -72,6 +73,22 @@ GpuFeatureStatus GetMetalFeatureStatus(
#endif #endif
} }
GpuFeatureStatus GetVulkanFeatureStatus(
const std::set<int>& blacklisted_features,
const GpuPreferences& gpu_preferences) {
#if BUILDFLAG(ENABLE_VULKAN)
if (blacklisted_features.count(GPU_FEATURE_TYPE_VULKAN))
return kGpuFeatureStatusBlacklisted;
if (gpu_preferences.use_vulkan == VulkanImplementationName::kNone)
return kGpuFeatureStatusDisabled;
return kGpuFeatureStatusEnabled;
#else
return kGpuFeatureStatusDisabled;
#endif
}
GpuFeatureStatus GetGpuRasterizationFeatureStatus( GpuFeatureStatus GetGpuRasterizationFeatureStatus(
const std::set<int>& blacklisted_features, const std::set<int>& blacklisted_features,
const base::CommandLine& command_line) { const base::CommandLine& command_line) {
...@@ -312,6 +329,8 @@ GpuFeatureInfo ComputeGpuFeatureInfoWithHardwareAccelerationDisabled() { ...@@ -312,6 +329,8 @@ GpuFeatureInfo ComputeGpuFeatureInfoWithHardwareAccelerationDisabled() {
kGpuFeatureStatusDisabled; kGpuFeatureStatusDisabled;
gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] = gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] =
kGpuFeatureStatusDisabled; kGpuFeatureStatusDisabled;
gpu_feature_info.status_values[GPU_FEATURE_TYPE_VULKAN] =
kGpuFeatureStatusDisabled;
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) { for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) {
DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]); DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]);
...@@ -348,6 +367,8 @@ GpuFeatureInfo ComputeGpuFeatureInfoWithNoGpu() { ...@@ -348,6 +367,8 @@ GpuFeatureInfo ComputeGpuFeatureInfoWithNoGpu() {
kGpuFeatureStatusDisabled; kGpuFeatureStatusDisabled;
gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] = gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] =
kGpuFeatureStatusDisabled; kGpuFeatureStatusDisabled;
gpu_feature_info.status_values[GPU_FEATURE_TYPE_VULKAN] =
kGpuFeatureStatusDisabled;
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) { for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) {
DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]); DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]);
...@@ -384,6 +405,8 @@ GpuFeatureInfo ComputeGpuFeatureInfoForSwiftShader() { ...@@ -384,6 +405,8 @@ GpuFeatureInfo ComputeGpuFeatureInfoForSwiftShader() {
kGpuFeatureStatusDisabled; kGpuFeatureStatusDisabled;
gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] = gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] =
kGpuFeatureStatusDisabled; kGpuFeatureStatusDisabled;
gpu_feature_info.status_values[GPU_FEATURE_TYPE_VULKAN] =
kGpuFeatureStatusDisabled;
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) { for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) {
DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]); DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]);
...@@ -465,6 +488,8 @@ GpuFeatureInfo ComputeGpuFeatureInfo(const GPUInfo& gpu_info, ...@@ -465,6 +488,8 @@ GpuFeatureInfo ComputeGpuFeatureInfo(const GPUInfo& gpu_info,
gpu_preferences); gpu_preferences);
gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] = gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] =
GetMetalFeatureStatus(blacklisted_features, gpu_preferences); GetMetalFeatureStatus(blacklisted_features, gpu_preferences);
gpu_feature_info.status_values[GPU_FEATURE_TYPE_VULKAN] =
GetVulkanFeatureStatus(blacklisted_features, gpu_preferences);
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) { for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) {
DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]); DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]);
......
...@@ -274,7 +274,10 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, ...@@ -274,7 +274,10 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line,
#endif #endif
#if BUILDFLAG(ENABLE_VULKAN) #if BUILDFLAG(ENABLE_VULKAN)
if (gpu_preferences_.use_vulkan != gpu::VulkanImplementationName::kNone) { if (gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] ==
gpu::kGpuFeatureStatusEnabled) {
DCHECK_NE(gpu_preferences_.use_vulkan,
gpu::VulkanImplementationName::kNone);
bool use_swiftshader = gpu_preferences_.use_vulkan == bool use_swiftshader = gpu_preferences_.use_vulkan ==
gpu::VulkanImplementationName::kSwiftshader; gpu::VulkanImplementationName::kSwiftshader;
const bool enforce_protected_memory = const bool enforce_protected_memory =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment