blob: f063cd44e1f49dc759486909b955e00ced7aa197 [file] [log] [blame]
[email protected]84ad3a72012-02-07 00:29:451// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]a80f5ece2011-10-20 23:56:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
avif15d60a2015-12-21 17:06:335#include <stdint.h>
6
Jonah Ryan-Davisabafaff2020-03-10 17:34:197#include "gpu/command_buffer/common/gpu_memory_buffer_support.h"
[email protected]d7b5cc72013-05-23 20:05:008#include "gpu/config/gpu_info.h"
Zhenyao Mo964f6832019-09-17 01:41:099#include "gpu/config/gpu_util.h"
[email protected]a80f5ece2011-10-20 23:56:5510
Jonah Ryan-Davisabafaff2020-03-10 17:34:1911#if defined(OS_MACOSX)
12#include <GLES2/gl2.h>
13#include <GLES2/gl2extchromium.h>
14#endif // OS_MACOSX
15
[email protected]fd4dcc52013-08-15 11:37:4316namespace {
17
henryhsud1185442015-04-10 06:39:1418void EnumerateGPUDevice(const gpu::GPUInfo::GPUDevice& device,
19 gpu::GPUInfo::Enumerator* enumerator) {
[email protected]fd4dcc52013-08-15 11:37:4320 enumerator->BeginGPUDevice();
21 enumerator->AddInt("vendorId", device.vendor_id);
22 enumerator->AddInt("deviceId", device.device_id);
Zhenyao Mo1d8d106a2019-09-26 19:32:4123#if defined(OS_WIN)
24 enumerator->AddInt("subSysId", device.sub_sys_id);
25 enumerator->AddInt("revision", device.revision);
26#endif // OS_WIN
[email protected]20e7cfc2014-04-02 17:33:1327 enumerator->AddBool("active", device.active);
[email protected]fd4dcc52013-08-15 11:37:4328 enumerator->AddString("vendorString", device.vendor_string);
29 enumerator->AddString("deviceString", device.device_string);
Zhenyao Mofbea81d2018-06-01 17:29:2730 enumerator->AddString("driverVendor", device.driver_vendor);
31 enumerator->AddString("driverVersion", device.driver_version);
Olli Etuaho1241aea2018-08-09 07:49:1532 enumerator->AddInt("cudaComputeCapabilityMajor",
33 device.cuda_compute_capability_major);
[email protected]fd4dcc52013-08-15 11:37:4334 enumerator->EndGPUDevice();
35}
36
henryhsud1185442015-04-10 06:39:1437void EnumerateVideoDecodeAcceleratorSupportedProfile(
38 const gpu::VideoDecodeAcceleratorSupportedProfile& profile,
39 gpu::GPUInfo::Enumerator* enumerator) {
40 enumerator->BeginVideoDecodeAcceleratorSupportedProfile();
41 enumerator->AddInt("profile", profile.profile);
42 enumerator->AddInt("maxResolutionWidth", profile.max_resolution.width());
43 enumerator->AddInt("maxResolutionHeight", profile.max_resolution.height());
44 enumerator->AddInt("minResolutionWidth", profile.min_resolution.width());
45 enumerator->AddInt("minResolutionHeight", profile.min_resolution.height());
dalecurtis4708098a2016-03-19 04:54:1146 enumerator->AddBool("encrypted_only", profile.encrypted_only);
henryhsud1185442015-04-10 06:39:1447 enumerator->EndVideoDecodeAcceleratorSupportedProfile();
48}
49
wuchengli79808322014-09-23 05:58:1450void EnumerateVideoEncodeAcceleratorSupportedProfile(
henryhsud1185442015-04-10 06:39:1451 const gpu::VideoEncodeAcceleratorSupportedProfile& profile,
52 gpu::GPUInfo::Enumerator* enumerator) {
wuchengli79808322014-09-23 05:58:1453 enumerator->BeginVideoEncodeAcceleratorSupportedProfile();
54 enumerator->AddInt("profile", profile.profile);
Miguel Casas4f26c552019-10-09 01:11:3955 enumerator->AddInt("minResolutionWidth", profile.min_resolution.width());
56 enumerator->AddInt("minResolutionHeight", profile.min_resolution.height());
wuchengli79808322014-09-23 05:58:1457 enumerator->AddInt("maxResolutionWidth", profile.max_resolution.width());
58 enumerator->AddInt("maxResolutionHeight", profile.max_resolution.height());
59 enumerator->AddInt("maxFramerateNumerator", profile.max_framerate_numerator);
60 enumerator->AddInt("maxFramerateDenominator",
61 profile.max_framerate_denominator);
62 enumerator->EndVideoEncodeAcceleratorSupportedProfile();
63}
64
Andres Calderon Jaramilloc68cd9142019-02-16 00:43:3365const char* ImageDecodeAcceleratorTypeToString(
66 gpu::ImageDecodeAcceleratorType type) {
67 switch (type) {
68 case gpu::ImageDecodeAcceleratorType::kJpeg:
69 return "JPEG";
Gil Dekele2f8e2522019-07-23 21:17:3570 case gpu::ImageDecodeAcceleratorType::kWebP:
71 return "WebP";
Andres Calderon Jaramilloc68cd9142019-02-16 00:43:3372 case gpu::ImageDecodeAcceleratorType::kUnknown:
73 return "Unknown";
74 }
Gil Dekele2f8e2522019-07-23 21:17:3575 NOTREACHED() << "Invalid ImageDecodeAcceleratorType.";
76 return "";
Andres Calderon Jaramilloc68cd9142019-02-16 00:43:3377}
78
79const char* ImageDecodeAcceleratorSubsamplingToString(
80 gpu::ImageDecodeAcceleratorSubsampling subsampling) {
81 switch (subsampling) {
82 case gpu::ImageDecodeAcceleratorSubsampling::k420:
83 return "4:2:0";
84 case gpu::ImageDecodeAcceleratorSubsampling::k422:
85 return "4:2:2";
Andres Calderon Jaramillo4fdf6c42019-03-21 15:45:0686 case gpu::ImageDecodeAcceleratorSubsampling::k444:
87 return "4:4:4";
Andres Calderon Jaramilloc68cd9142019-02-16 00:43:3388 }
89}
90
91void EnumerateImageDecodeAcceleratorSupportedProfile(
92 const gpu::ImageDecodeAcceleratorSupportedProfile& profile,
93 gpu::GPUInfo::Enumerator* enumerator) {
94 enumerator->BeginImageDecodeAcceleratorSupportedProfile();
95 enumerator->AddString("imageType",
96 ImageDecodeAcceleratorTypeToString(profile.image_type));
97 enumerator->AddString("minEncodedDimensions",
98 profile.min_encoded_dimensions.ToString());
99 enumerator->AddString("maxEncodedDimensions",
100 profile.max_encoded_dimensions.ToString());
101 std::string subsamplings;
102 for (size_t i = 0; i < profile.subsamplings.size(); i++) {
103 if (i > 0)
104 subsamplings += ", ";
105 subsamplings +=
106 ImageDecodeAcceleratorSubsamplingToString(profile.subsamplings[i]);
107 }
108 enumerator->AddString("subsamplings", subsamplings);
109 enumerator->EndImageDecodeAcceleratorSupportedProfile();
110}
111
Sunny Sachanandanifc66e9a2018-07-10 18:08:29112#if defined(OS_WIN)
Zhenyao Moda88bdc2018-09-27 01:47:33113void EnumerateDx12VulkanVersionInfo(const gpu::Dx12VulkanVersionInfo& info,
114 gpu::GPUInfo::Enumerator* enumerator) {
115 enumerator->BeginDx12VulkanVersionInfo();
116 enumerator->AddBool("supportsDx12", info.supports_dx12);
117 enumerator->AddBool("supportsVulkan", info.supports_vulkan);
Zhenyao Mo964f6832019-09-17 01:41:09118 enumerator->AddString("dx12FeatureLevel",
119 gpu::D3DFeatureLevelToString(info.d3d12_feature_level));
120 enumerator->AddString("vulkanVersion",
121 gpu::VulkanVersionToString(info.vulkan_version));
Zhenyao Moda88bdc2018-09-27 01:47:33122 enumerator->EndDx12VulkanVersionInfo();
123}
Maggie Chen8f177172020-02-11 00:02:28124
125void EnumerateOverlayInfo(const gpu::OverlayInfo& info,
126 gpu::GPUInfo::Enumerator* enumerator) {
127 enumerator->BeginOverlayInfo();
128 enumerator->AddBool("directComposition", info.direct_composition);
129 enumerator->AddBool("supportsOverlays", info.supports_overlays);
130 enumerator->AddString("yuy2OverlaySupport",
131 gpu::OverlaySupportToString(info.yuy2_overlay_support));
132 enumerator->AddString("nv12OverlaySupport",
133 gpu::OverlaySupportToString(info.nv12_overlay_support));
134 enumerator->EndOverlayInfo();
135}
Sunny Sachanandanifc66e9a2018-07-10 18:08:29136#endif
137
[email protected]fd4dcc52013-08-15 11:37:43138} // namespace
139
[email protected]d7b5cc72013-05-23 20:05:00140namespace gpu {
[email protected]a80f5ece2011-10-20 23:56:55141
Sunny Sachanandani3dcb5da2018-10-18 04:59:43142#if defined(OS_WIN)
Zhenyao Mo4178e192019-05-16 21:46:11143const char* OverlaySupportToString(gpu::OverlaySupport support) {
144 switch (support) {
145 case gpu::OverlaySupport::kNone:
146 return "NONE";
147 case gpu::OverlaySupport::kDirect:
148 return "DIRECT";
149 case gpu::OverlaySupport::kScaling:
150 return "SCALING";
Sunny Sachanandanifc66e9a2018-07-10 18:08:29151 }
Sunny Sachanandanifc66e9a2018-07-10 18:08:29152}
Zhenyao Mo4178e192019-05-16 21:46:11153#endif // OS_WIN
Sunny Sachanandanifc66e9a2018-07-10 18:08:29154
Jonah Ryan-Davisabafaff2020-03-10 17:34:19155#if defined(OS_MACOSX)
156GPU_EXPORT bool ValidateMacOSSpecificTextureTarget(int target) {
157 switch (target) {
158 case GL_TEXTURE_2D:
159 case GL_TEXTURE_RECTANGLE_ARB:
160 return true;
161
162 default:
163 return false;
164 }
165}
166#endif // OS_MACOSX
167
liberato575877902015-12-10 17:16:26168VideoDecodeAcceleratorCapabilities::VideoDecodeAcceleratorCapabilities()
169 : flags(0) {}
170
vmpstr3b7b8b22016-03-01 23:00:20171VideoDecodeAcceleratorCapabilities::VideoDecodeAcceleratorCapabilities(
172 const VideoDecodeAcceleratorCapabilities& other) = default;
173
Chris Watkins81030772017-12-07 01:20:56174VideoDecodeAcceleratorCapabilities::~VideoDecodeAcceleratorCapabilities() =
175 default;
liberato575877902015-12-10 17:16:26176
Andres Calderon Jaramilloc68cd9142019-02-16 00:43:33177ImageDecodeAcceleratorSupportedProfile::ImageDecodeAcceleratorSupportedProfile()
178 : image_type(ImageDecodeAcceleratorType::kUnknown) {}
179
180ImageDecodeAcceleratorSupportedProfile::ImageDecodeAcceleratorSupportedProfile(
181 const ImageDecodeAcceleratorSupportedProfile& other) = default;
182
183ImageDecodeAcceleratorSupportedProfile::ImageDecodeAcceleratorSupportedProfile(
184 ImageDecodeAcceleratorSupportedProfile&& other) = default;
185
186ImageDecodeAcceleratorSupportedProfile::
187 ~ImageDecodeAcceleratorSupportedProfile() = default;
188
189ImageDecodeAcceleratorSupportedProfile& ImageDecodeAcceleratorSupportedProfile::
190operator=(const ImageDecodeAcceleratorSupportedProfile& other) = default;
191
192ImageDecodeAcceleratorSupportedProfile& ImageDecodeAcceleratorSupportedProfile::
193operator=(ImageDecodeAcceleratorSupportedProfile&& other) = default;
194
Zhenyao Mo1d8d106a2019-09-26 19:32:41195GPUInfo::GPUDevice::GPUDevice() = default;
[email protected]a094e2c2012-05-10 23:02:42196
Zhenyao Mofbea81d2018-06-01 17:29:27197GPUInfo::GPUDevice::GPUDevice(const GPUInfo::GPUDevice& other) = default;
198
199GPUInfo::GPUDevice::GPUDevice(GPUInfo::GPUDevice&& other) noexcept = default;
200
201GPUInfo::GPUDevice::~GPUDevice() noexcept = default;
202
203GPUInfo::GPUDevice& GPUInfo::GPUDevice::operator=(
204 const GPUInfo::GPUDevice& other) = default;
205
206GPUInfo::GPUDevice& GPUInfo::GPUDevice::operator=(
207 GPUInfo::GPUDevice&& other) noexcept = default;
[email protected]a094e2c2012-05-10 23:02:42208
[email protected]a80f5ece2011-10-20 23:56:55209GPUInfo::GPUInfo()
zmo84eae5e2014-09-05 01:36:23210 : optimus(false),
[email protected]c32b0c2c2012-04-07 01:34:33211 amd_switchable(false),
[email protected]6c7784e2013-08-01 22:41:28212 gl_reset_notification_strategy(0),
[email protected]fad3ccf2012-09-11 22:36:00213 software_rendering(false),
[email protected]47752982014-07-29 08:01:43214 sandboxed(false),
bajonese3677b649ff2015-07-25 00:41:56215 in_process_gpu(true),
geofflang774e87a2016-12-05 16:29:01216 passthrough_cmd_decoder(false),
Jonah Ryan-Davisabafaff2020-03-10 17:34:19217#if defined(OS_MACOSX)
218 macos_specific_texture_target(gpu::GetPlatformSpecificTextureTarget()),
219#endif // OS_MACOSX
Jonathan Backera57031b2018-06-04 15:44:32220 jpeg_decode_accelerator_supported(false),
Mitsuru Oshima345e9b52019-10-19 00:07:36221 oop_rasterization_supported(false),
222 subpixel_font_rendering(true) {
[email protected]a80f5ece2011-10-20 23:56:55223}
224
vmpstr3b7b8b22016-03-01 23:00:20225GPUInfo::GPUInfo(const GPUInfo& other) = default;
226
Chris Watkins81030772017-12-07 01:20:56227GPUInfo::~GPUInfo() = default;
[email protected]a80f5ece2011-10-20 23:56:55228
Zhenyao Mofbea81d2018-06-01 17:29:27229GPUInfo::GPUDevice& GPUInfo::active_gpu() {
230 return const_cast<GPUInfo::GPUDevice&>(
231 const_cast<const GPUInfo&>(*this).active_gpu());
232}
233
ccameron8c3b0dd132017-05-16 19:30:50234const GPUInfo::GPUDevice& GPUInfo::active_gpu() const {
Zhenyao Moc4f79c32018-01-27 02:44:13235 if (gpu.active || secondary_gpus.empty())
ccameron8c3b0dd132017-05-16 19:30:50236 return gpu;
Zhenyao Mofbea81d2018-06-01 17:29:27237 for (const auto& secondary_gpu : secondary_gpus) {
ccameron8c3b0dd132017-05-16 19:30:50238 if (secondary_gpu.active)
239 return secondary_gpu;
240 }
Zhenyao Mofbea81d2018-06-01 17:29:27241 DVLOG(2) << "No active GPU found, returning primary GPU.";
ccameron8c3b0dd132017-05-16 19:30:50242 return gpu;
243}
244
Zhenyao Mo68ef56d2018-04-21 01:05:10245bool GPUInfo::IsInitialized() const {
246 return gpu.vendor_id != 0 || !gl_vendor.empty();
247}
248
[email protected]fd4dcc52013-08-15 11:37:43249void GPUInfo::EnumerateFields(Enumerator* enumerator) const {
250 struct GPUInfoKnownFields {
[email protected]fd4dcc52013-08-15 11:37:43251 base::TimeDelta initialization_time;
252 bool optimus;
253 bool amd_switchable;
[email protected]fd4dcc52013-08-15 11:37:43254 GPUDevice gpu;
255 std::vector<GPUDevice> secondary_gpus;
[email protected]fd4dcc52013-08-15 11:37:43256 std::string pixel_shader_version;
257 std::string vertex_shader_version;
senorblancob7a64d572015-04-08 16:59:02258 std::string max_msaa_samples;
[email protected]2ac8e51c2014-04-21 20:54:13259 std::string machine_model_name;
260 std::string machine_model_version;
[email protected]fd4dcc52013-08-15 11:37:43261 std::string gl_version_string;
262 std::string gl_vendor;
263 std::string gl_renderer;
264 std::string gl_extensions;
265 std::string gl_ws_vendor;
266 std::string gl_ws_version;
267 std::string gl_ws_extensions;
avif15d60a2015-12-21 17:06:33268 uint32_t gl_reset_notification_strategy;
[email protected]fd4dcc52013-08-15 11:37:43269 bool software_rendering;
Jonathan Backer01293832019-03-20 20:27:10270 std::string direct_rendering_version;
[email protected]fd4dcc52013-08-15 11:37:43271 bool sandboxed;
bajonese3677b649ff2015-07-25 00:41:56272 bool in_process_gpu;
geofflang774e87a2016-12-05 16:29:01273 bool passthrough_cmd_decoder;
Bo Liu9cad099c2017-07-06 14:45:27274 bool can_support_threaded_texture_mailbox;
Jonah Ryan-Davisabafaff2020-03-10 17:34:19275#if defined(OS_MACOSX)
276 uint32_t macos_specific_texture_target;
277#endif // OS_MACOSX
[email protected]fd4dcc52013-08-15 11:37:43278#if defined(OS_WIN)
279 DxDiagNode dx_diagnostics;
Zhenyao Moda88bdc2018-09-27 01:47:33280 Dx12VulkanVersionInfo dx12_vulkan_version_info;
Maggie Chen8f177172020-02-11 00:02:28281 OverlayInfo overlay_info;
[email protected]fd4dcc52013-08-15 11:37:43282#endif
Maggie Chen35d65e4a2018-04-12 21:15:25283
liberato575877902015-12-10 17:16:26284 VideoDecodeAcceleratorCapabilities video_decode_accelerator_capabilities;
henryhsud1185442015-04-10 06:39:14285 VideoEncodeAcceleratorSupportedProfiles
wuchengli79808322014-09-23 05:58:14286 video_encode_accelerator_supported_profiles;
henryhsu74f6ef12015-07-23 08:34:37287 bool jpeg_decode_accelerator_supported;
Andres Calderon Jaramilloc68cd9142019-02-16 00:43:33288
289 ImageDecodeAcceleratorSupportedProfiles
290 image_decode_accelerator_supported_profiles;
291
Jonathan Backera57031b2018-06-04 15:44:32292 bool oop_rasterization_supported;
Mitsuru Oshima345e9b52019-10-19 00:07:36293 bool subpixel_font_rendering;
Peng Huang386c31c2019-11-13 20:38:23294
295#if BUILDFLAG(ENABLE_VULKAN)
296 base::Optional<VulkanInfo> vulkan_info;
297#endif
[email protected]fd4dcc52013-08-15 11:37:43298 };
299
300 // If this assert fails then most likely something below needs to be updated.
301 // Note that this assert is only approximate. If a new field is added to
302 // GPUInfo which fits within the current padding then it will not be caught.
mostynb7f032092014-12-20 00:36:44303 static_assert(
[email protected]fd4dcc52013-08-15 11:37:43304 sizeof(GPUInfo) == sizeof(GPUInfoKnownFields),
mostynb7f032092014-12-20 00:36:44305 "fields have changed in GPUInfo, GPUInfoKnownFields must be updated");
[email protected]fd4dcc52013-08-15 11:37:43306
307 // Required fields (according to DevTools protocol) first.
[email protected]2ac8e51c2014-04-21 20:54:13308 enumerator->AddString("machineModelName", machine_model_name);
309 enumerator->AddString("machineModelVersion", machine_model_version);
henryhsud1185442015-04-10 06:39:14310 EnumerateGPUDevice(gpu, enumerator);
Jonathan Backera57031b2018-06-04 15:44:32311 for (const auto& secondary_gpu : secondary_gpus)
henryhsud1185442015-04-10 06:39:14312 EnumerateGPUDevice(secondary_gpu, enumerator);
[email protected]fd4dcc52013-08-15 11:37:43313
314 enumerator->BeginAuxAttributes();
Miguel Casas28ee90f2019-05-28 19:12:26315 enumerator->AddTimeDeltaInSecondsF("initializationTime", initialization_time);
[email protected]fd4dcc52013-08-15 11:37:43316 enumerator->AddBool("optimus", optimus);
317 enumerator->AddBool("amdSwitchable", amd_switchable);
[email protected]fd4dcc52013-08-15 11:37:43318 enumerator->AddString("pixelShaderVersion", pixel_shader_version);
319 enumerator->AddString("vertexShaderVersion", vertex_shader_version);
senorblancob7a64d572015-04-08 16:59:02320 enumerator->AddString("maxMsaaSamples", max_msaa_samples);
[email protected]fd4dcc52013-08-15 11:37:43321 enumerator->AddString("glVersion", gl_version);
[email protected]fd4dcc52013-08-15 11:37:43322 enumerator->AddString("glVendor", gl_vendor);
323 enumerator->AddString("glRenderer", gl_renderer);
324 enumerator->AddString("glExtensions", gl_extensions);
325 enumerator->AddString("glWsVendor", gl_ws_vendor);
326 enumerator->AddString("glWsVersion", gl_ws_version);
327 enumerator->AddString("glWsExtensions", gl_ws_extensions);
328 enumerator->AddInt(
329 "glResetNotificationStrategy",
330 static_cast<int>(gl_reset_notification_strategy));
[email protected]fd4dcc52013-08-15 11:37:43331 // TODO(kbr): add performance_stats.
332 enumerator->AddBool("softwareRendering", software_rendering);
Jonathan Backer01293832019-03-20 20:27:10333 enumerator->AddString("directRenderingVersion", direct_rendering_version);
[email protected]fd4dcc52013-08-15 11:37:43334 enumerator->AddBool("sandboxed", sandboxed);
bajonese3677b649ff2015-07-25 00:41:56335 enumerator->AddBool("inProcessGpu", in_process_gpu);
geofflang774e87a2016-12-05 16:29:01336 enumerator->AddBool("passthroughCmdDecoder", passthrough_cmd_decoder);
Bo Liu9cad099c2017-07-06 14:45:27337 enumerator->AddBool("canSupportThreadedTextureMailbox",
338 can_support_threaded_texture_mailbox);
Jonah Ryan-Davisabafaff2020-03-10 17:34:19339#if defined(OS_MACOSX)
340 enumerator->AddInt("macOSSpecificTextureTarget",
341 macos_specific_texture_target);
342#endif // OS_MACOSX
[email protected]fd4dcc52013-08-15 11:37:43343 // TODO(kbr): add dx_diagnostics on Windows.
Maggie Chen35d65e4a2018-04-12 21:15:25344#if defined(OS_WIN)
Maggie Chen8f177172020-02-11 00:02:28345 EnumerateOverlayInfo(overlay_info, enumerator);
Zhenyao Moda88bdc2018-09-27 01:47:33346 EnumerateDx12VulkanVersionInfo(dx12_vulkan_version_info, enumerator);
Maggie Chen35d65e4a2018-04-12 21:15:25347#endif
liberato575877902015-12-10 17:16:26348 enumerator->AddInt("videoDecodeAcceleratorFlags",
349 video_decode_accelerator_capabilities.flags);
Miguel Casas28ee90f2019-05-28 19:12:26350
351 // TODO(crbug.com/966839): Fix the two supported profile dumping below.
liberato575877902015-12-10 17:16:26352 for (const auto& profile :
353 video_decode_accelerator_capabilities.supported_profiles)
henryhsud1185442015-04-10 06:39:14354 EnumerateVideoDecodeAcceleratorSupportedProfile(profile, enumerator);
355 for (const auto& profile : video_encode_accelerator_supported_profiles)
356 EnumerateVideoEncodeAcceleratorSupportedProfile(profile, enumerator);
henryhsu74f6ef12015-07-23 08:34:37357 enumerator->AddBool("jpegDecodeAcceleratorSupported",
358 jpeg_decode_accelerator_supported);
Andres Calderon Jaramilloc68cd9142019-02-16 00:43:33359 for (const auto& profile : image_decode_accelerator_supported_profiles)
360 EnumerateImageDecodeAcceleratorSupportedProfile(profile, enumerator);
Jonathan Backera57031b2018-06-04 15:44:32361 enumerator->AddBool("oopRasterizationSupported", oop_rasterization_supported);
Mitsuru Oshima345e9b52019-10-19 00:07:36362 enumerator->AddBool("subpixelFontRendering", subpixel_font_rendering);
Peng Huang386c31c2019-11-13 20:38:23363#if BUILDFLAG(ENABLE_VULKAN)
364 if (vulkan_info) {
365 auto blob = vulkan_info->Serialize();
366 enumerator->AddBinary("vulkanInfo", base::span<const uint8_t>(blob));
367 }
368#endif
Samuel Attard9cb0f77a2019-07-02 23:31:31369 enumerator->EndAuxAttributes();
[email protected]fd4dcc52013-08-15 11:37:43370}
371
[email protected]d7b5cc72013-05-23 20:05:00372} // namespace gpu