New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 648493 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner: ----
Closed: Apr 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 3
Type: Bug



Sign in to add a comment

Figure out long-term way to blacklist/whitelist gpu rasterization on windows.

Project Member Reported by jbau...@chromium.org, Sep 20 2016

Issue description

Maintaining a whitelist for GPU rasterization will be hard over time as new cards are released. Additionally, maintaining a blacklist is difficult in the face of a huge number of weird cards being released.

We'd like to restrict it to hardware with shader model 5.0, but currently the only things we have to go on in the browser process are device ID, vendor ID, and driver release date, so it's hard to figure out anything dynamically. However, LayerTreeHostImpl in the renderer has access to the gpu::Capabilities from the GPU process, so if we include information about the shader model we could rely on it there. Then we could rely on a driver version blacklist for most of the rest.

It would make reporting the information in about:gpu a bit more difficult, as the browser wouldn't have access to the renderer's blacklisting logic. We could maybe special-case it, as the shader models are reported to the GpuDataManagerImpl as well.

 
Components: Internals>GPU
Project Member

Comment 2 by bugdroid1@chromium.org, Feb 10 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/41a1579e255266ab1f48bfd3c963aebde8579f44

commit 41a1579e255266ab1f48bfd3c963aebde8579f44
Author: ericrk <ericrk@chromium.org>
Date: Fri Feb 10 20:56:28 2017

Move GPU raster decision making to GPU proc

This change moves decision making about whether to use GPU raster
from the browser process to the GPU process. This allows the
decision to be made based on more detailed GPU information, which
is not available to the browser. The new decision making process
is as follows:

The GPU process loads the GPU blacklist at startup, using more
complete GPUInfo than is available to the browser. This data is
combined with flags (forwarded from the browser) to
generate a GpuFeatureInfo struct which contains enabled/
blacklisted/disabled values for each GPU feature (currently
only populated for GPU raster).

The GPU process notifies the browser of its decision
by passing the GpuFeatureInfo via GpuHostMessage_Initialized.
The browser uses this info solely to populate about:gpu.

The GPU process notifies the renderer process of its decision
via context capabilities. The renderer uses this info to make
decisions on how to rasterize.

In the Render process, we now recieve GPU raster information
at a later point (when we create our CompositorFrameSink), so
we can't store this info in LayerTreeSettings. This requires
a bit of refactoring to have tests use context Capabilities
rather than LayerTreeSettings to provide this information.

BUG= 648493 
R=zmo@chromium.org
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/2654993004
Cr-Commit-Position: refs/heads/master@{#449729}

[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/layers/picture_layer_impl_unittest.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/layers/texture_layer_impl_unittest.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/test/fake_compositor_frame_sink.h
[delete] https://crrev.com/40029084fa291f3a0ef6cf22a90ff86e281f9cf6/cc/test/gpu_rasterization_enabled_settings.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/test/layer_test_common.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/test/layer_test_common.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/test/test_web_graphics_context_3d.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/trees/layer_tree_host.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/trees/layer_tree_host.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/trees/layer_tree_host_impl.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/trees/layer_tree_host_impl_unittest.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/trees/layer_tree_host_pixeltest_synchronous.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/trees/layer_tree_host_pixeltest_tiles.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/trees/layer_tree_host_unittest.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/trees/layer_tree_host_unittest_record_gpu_histogram.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/trees/layer_tree_settings.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/cc/trees/layer_tree_settings.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/chrome/browser/about_flags.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/chrome/browser/chrome_content_browser_client.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/browser/gpu/compositor_util.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/browser/gpu/gpu_data_manager_impl.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/browser/gpu/gpu_data_manager_impl.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/browser/gpu/gpu_data_manager_impl_private.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/browser/gpu/gpu_data_manager_impl_private.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/browser/gpu/gpu_process_host.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/browser/gpu/gpu_process_host.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/browser/renderer_host/render_process_host_impl.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/common/gpu_host_messages.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/gpu/gpu_child_thread.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/gpu/gpu_child_thread.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/gpu/gpu_main.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/gpu/in_process_gpu_thread.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/public/browser/gpu_data_manager.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/public/common/content_features.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/public/common/content_features.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/public/common/content_switches.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/public/common/content_switches.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/renderer/gpu/compositor_dependencies.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/renderer/gpu/render_widget_compositor.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/renderer/render_thread_impl.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/renderer/render_thread_impl.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/shell/app/shell_main_delegate.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/test/fake_compositor_dependencies.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/content/test/fake_compositor_dependencies.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/command_buffer/common/capabilities.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/command_buffer/service/context_group.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/command_buffer/service/context_group.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/command_buffer/service/context_group_unittest.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/command_buffer/service/gles2_cmd_decoder.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/command_buffer/tests/fuzzer_main.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/command_buffer/tests/gl_manager.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/config/BUILD.gn
[add] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/config/gpu_feature_info.cc
[add] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/config/gpu_feature_info.h
[add] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/config/gpu_finch_features.cc
[add] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/config/gpu_finch_features.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/config/gpu_switches.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/config/gpu_switches.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/config/gpu_util.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/config/gpu_util.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/gles2_conform_support/egl/context.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/ipc/common/gpu_command_buffer_traits_multi.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/ipc/common/gpu_param_traits_macros.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/ipc/in_process_command_buffer.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/ipc/in_process_command_buffer.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/ipc/service/gpu_channel_manager.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/ipc/service/gpu_channel_manager.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/ipc/service/gpu_channel_test_common.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/ipc/service/gpu_command_buffer_stub.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/ipc/service/gpu_init.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/gpu/ipc/service/gpu_init.h
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/services/ui/gpu/gpu_main.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/services/ui/gpu/gpu_service.cc
[modify] https://crrev.com/41a1579e255266ab1f48bfd3c963aebde8579f44/services/ui/gpu/gpu_service.h

Project Member

Comment 3 by bugdroid1@chromium.org, Feb 10 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/2c9e097081d506490382ae599a1543436144a195

commit 2c9e097081d506490382ae599a1543436144a195
Author: ericrk <ericrk@chromium.org>
Date: Fri Feb 10 22:15:32 2017

Add pixel shader version to GPU control list

Adds the ability to filter GPU control list entries by pixel shader
version. This will be used to mass-exclude older cards from GPU raster.

crrev.com/2654993004 moves GPU blacklist calculation (for GPU raster) to the GPU proc, communicating GPU raster status with the renderer via context caps. This enables more advanced filtering like this.

BUG= 648493 
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/2642923002
Cr-Commit-Position: refs/heads/master@{#449756}

[modify] https://crrev.com/2c9e097081d506490382ae599a1543436144a195/gpu/config/gpu_control_list.cc
[modify] https://crrev.com/2c9e097081d506490382ae599a1543436144a195/gpu/config/gpu_control_list.h
[modify] https://crrev.com/2c9e097081d506490382ae599a1543436144a195/gpu/config/gpu_control_list_entry_unittest.cc
[modify] https://crrev.com/2c9e097081d506490382ae599a1543436144a195/gpu/config/gpu_control_list_format.txt

Project Member

Comment 4 by bugdroid1@chromium.org, Apr 11 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/92baf57db3f16287dcc205d89c2e902a7bd4bb5a

commit 92baf57db3f16287dcc205d89c2e902a7bd4bb5a
Author: ericrk <ericrk@chromium.org>
Date: Tue Apr 11 19:36:16 2017

Pass missing kIgnoreGpuBlacklist flag to GPU proc

This should have been added as part of crrev.com/2654993004.

R=zmo@chromium.org
BUG= 648493 ,701244

Review-Url: https://codereview.chromium.org/2783783002
Cr-Commit-Position: refs/heads/master@{#463727}

[modify] https://crrev.com/92baf57db3f16287dcc205d89c2e902a7bd4bb5a/content/browser/gpu/gpu_process_host.cc

Comment 5 by ericrk@chromium.org, Apr 11 2017

Status: Fixed (was: Available)

Sign in to add a comment