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 @@
#include "base/command_line.h"
#include "base/logging.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/pattern.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/threading/scoped_blocking_call.h"
#include "base/trace_event/trace_event.h"
#include "build/build_config.h"
......@@ -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
GpuInit::GpuInit() = default;
......@@ -787,6 +801,15 @@ bool GpuInit::InitializeVulkan() {
if (!vulkan_implementation_)
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 &&
!CheckVulkanCompabilities(
vulkan_implementation_->GetVulkanInstance()->vulkan_info(),
......
......@@ -146,11 +146,7 @@ bool VulkanImplementationX11::GetPhysicalDevicePresentationSupport(
std::vector<const char*>
VulkanImplementationX11::GetRequiredDeviceExtensions() {
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};
std::vector<const char*> extensions = {};
if (using_surface_)
extensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
return extensions;
......@@ -158,7 +154,11 @@ VulkanImplementationX11::GetRequiredDeviceExtensions() {
std::vector<const char*>
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) {
......
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