Commit eec8c8c0 authored by Peng Huang's avatar Peng Huang Committed by Commit Bot

vulkan: add two params for vulkan field trial.

 disable_by_gl_renderer: a string contain patterns to be used to match
         with gl renderer string. If any pattern in the string matches,
         vulkan will be disabled.
 force_enable_by_gl_renderer: similar to disable_by_gl_renderer, but if
         any pattern matches, vulkan will be enabled even if the GPU is
         blocklisted.

params: 
Bug: 1022495
Change-Id: I04c1affd7c3c22baa4aa0bc048463f8f0a80d3a7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2361042
Auto-Submit: Peng Huang <penghuang@chromium.org>
Reviewed-by: default avatarJonathan Backer <backer@chromium.org>
Reviewed-by: default avatarAlexei Svitkine <asvitkine@chromium.org>
Commit-Queue: Peng Huang <penghuang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800370}
parent 9270d534
...@@ -9,7 +9,9 @@ ...@@ -9,7 +9,9 @@
#include "base/command_line.h" #include "base/command_line.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/strings/pattern.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/threading/scoped_blocking_call.h" #include "base/threading/scoped_blocking_call.h"
#include "base/trace_event/trace_event.h" #include "base/trace_event/trace_event.h"
#include "build/build_config.h" #include "build/build_config.h"
...@@ -144,6 +146,18 @@ void DisableInProcessGpuVulkan(GpuFeatureInfo* gpu_feature_info, ...@@ -144,6 +146,18 @@ void DisableInProcessGpuVulkan(GpuFeatureInfo* gpu_feature_info,
} }
} }
#if BUILDFLAG(ENABLE_VULKAN)
bool MatchGLRenderer(const GPUInfo& gpu_info, const std::string& patterns) {
auto pattern_strings = base::SplitString(patterns, "|", base::TRIM_WHITESPACE,
base::SPLIT_WANT_ALL);
for (const auto& pattern : pattern_strings) {
if (base::MatchPattern(gpu_info.gl_renderer, pattern))
return true;
}
return false;
}
#endif // !BUILDFLAG(ENABLE_VULKAN)
} // namespace } // namespace
GpuInit::GpuInit() = default; GpuInit::GpuInit() = default;
...@@ -787,6 +801,15 @@ bool GpuInit::InitializeVulkan() { ...@@ -787,6 +801,15 @@ bool GpuInit::InitializeVulkan() {
if (!vulkan_implementation_) if (!vulkan_implementation_)
return false; return false;
auto disable_patterns = base::GetFieldTrialParamValueByFeature(
features::kVulkan, "disable_by_gl_renderer");
if (MatchGLRenderer(gpu_info_, disable_patterns))
return false;
auto enable_patterns = base::GetFieldTrialParamValueByFeature(
features::kVulkan, "force_enable_by_gl_renderer");
forced_native |= MatchGLRenderer(gpu_info_, enable_patterns);
if (!use_swiftshader && !forced_native && if (!use_swiftshader && !forced_native &&
!CheckVulkanCompabilities( !CheckVulkanCompabilities(
vulkan_implementation_->GetVulkanInstance()->vulkan_info(), vulkan_implementation_->GetVulkanInstance()->vulkan_info(),
......
...@@ -146,11 +146,7 @@ bool VulkanImplementationX11::GetPhysicalDevicePresentationSupport( ...@@ -146,11 +146,7 @@ bool VulkanImplementationX11::GetPhysicalDevicePresentationSupport(
std::vector<const char*> std::vector<const char*>
VulkanImplementationX11::GetRequiredDeviceExtensions() { VulkanImplementationX11::GetRequiredDeviceExtensions() {
std::vector<const char*> extensions = { std::vector<const char*> extensions = {};
VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME,
VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME,
VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME};
if (using_surface_) if (using_surface_)
extensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME); extensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
return extensions; return extensions;
...@@ -158,7 +154,11 @@ VulkanImplementationX11::GetRequiredDeviceExtensions() { ...@@ -158,7 +154,11 @@ VulkanImplementationX11::GetRequiredDeviceExtensions() {
std::vector<const char*> std::vector<const char*>
VulkanImplementationX11::GetOptionalDeviceExtensions() { VulkanImplementationX11::GetOptionalDeviceExtensions() {
return {VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME}; return {VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME,
VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME,
VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME,
VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME};
} }
VkFence VulkanImplementationX11::CreateVkFenceForGpuFence(VkDevice vk_device) { VkFence VulkanImplementationX11::CreateVkFenceForGpuFence(VkDevice vk_device) {
......
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