Index: content/common/gpu/gpu_channel.cc |
diff --git a/content/common/gpu/gpu_channel.cc b/content/common/gpu/gpu_channel.cc |
index c79d20151fffb4c6f34bc9755f0bf04a250d9774..20edeafa8467e1ad4f42da2350c052003e8be2a6 100644 |
--- a/content/common/gpu/gpu_channel.cc |
+++ b/content/common/gpu/gpu_channel.cc |
@@ -760,6 +760,8 @@ bool GpuChannel::OnControlMessageReceived(const IPC::Message& msg) { |
OnCreateCommandBuffer) |
IPC_MESSAGE_HANDLER(GpuChannelMsg_DestroyCommandBuffer, |
OnDestroyCommandBuffer) |
+ IPC_MESSAGE_HANDLER(GpuChannelMsg_GetDriverBugWorkArounds, |
+ OnGetDriverBugWorkArounds) |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
return handled; |
@@ -978,6 +980,23 @@ void GpuChannel::OnDestroyCommandBuffer(int32_t route_id) { |
RemoveRoute(route_id); |
} |
+void GpuChannel::OnGetDriverBugWorkArounds( |
+ std::vector<std::string>* gpu_driver_bug_workarounds) { |
+ // TODO(j.isorce): http://crbug.com/599964 Do the extraction of workarounds in |
+ // the GpuChannelManager constructor. Currently it is done in the FeatureInfo |
+ // constructor. There is no need to extract them from the command-line every |
+ // time a new FeatureInfo is created (i.e. per ContextGroup) since parsing |
+ // result is a constant. |
+ scoped_refptr<gpu::gles2::FeatureInfo> feature_info = |
+ new gpu::gles2::FeatureInfo; |
+ gpu_driver_bug_workarounds->clear(); |
+#define GPU_OP(type, name) \ |
+ if (feature_info->workarounds().name) \ |
+ gpu_driver_bug_workarounds->push_back(#name); |
+ GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP) |
+#undef GPU_OP |
+} |
+ |
void GpuChannel::CacheShader(const std::string& key, |
const std::string& shader) { |
gpu_channel_manager_->delegate()->StoreShaderToDisk(client_id_, key, shader); |