Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Side by Side Diff: gpu/command_buffer/service/feature_info.cc

Issue 1374043005: Blacklist MSAA for GPU Raster on Intel GPUs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ignore_cr
Patch Set: version # Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/feature_info.h" 5 #include "gpu/command_buffer/service/feature_info.h"
6 6
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 command_line->HasSwitch(switches::kDisableVirtualContexts); 224 command_line->HasSwitch(switches::kDisableVirtualContexts);
225 225
226 // The shader translator is needed to translate from WebGL-conformant GLES SL 226 // The shader translator is needed to translate from WebGL-conformant GLES SL
227 // to normal GLES SL, enforce WebGL conformance, translate from GLES SL 1.0 to 227 // to normal GLES SL, enforce WebGL conformance, translate from GLES SL 1.0 to
228 // target context GLSL, etc. 228 // target context GLSL, etc.
229 // The flag here is for testing only. 229 // The flag here is for testing only.
230 disable_shader_translator_ = 230 disable_shader_translator_ =
231 command_line->HasSwitch(switches::kDisableGLSLTranslator); 231 command_line->HasSwitch(switches::kDisableGLSLTranslator);
232 232
233 unsafe_es3_apis_enabled_ = false; 233 unsafe_es3_apis_enabled_ = false;
234
235 // Default context_type_ to a GLES2 Context.
236 context_type_ = CONTEXT_TYPE_OPENGLES2;
234 } 237 }
235 238
236 bool FeatureInfo::Initialize() { 239 bool FeatureInfo::Initialize(ContextType context_type,
237 disallowed_features_ = DisallowedFeatures(); 240 const DisallowedFeatures& disallowed_features) {
241 disallowed_features_ = disallowed_features;
242 context_type_ = context_type;
238 InitializeFeatures(); 243 InitializeFeatures();
239 return true; 244 return true;
240 } 245 }
241 246
242 bool FeatureInfo::Initialize(const DisallowedFeatures& disallowed_features) { 247 bool FeatureInfo::InitializeForTesting() {
243 disallowed_features_ = disallowed_features; 248 return Initialize(CONTEXT_TYPE_OPENGLES2, DisallowedFeatures());
244 InitializeFeatures();
245 return true;
246 } 249 }
247 250
248 bool IsGL_REDSupportedOnFBOs() { 251 bool IsGL_REDSupportedOnFBOs() {
249 // Skia uses GL_RED with frame buffers, unfortunately, Mesa claims to support 252 // Skia uses GL_RED with frame buffers, unfortunately, Mesa claims to support
250 // GL_EXT_texture_rg, but it doesn't support it on frame buffers. To fix 253 // GL_EXT_texture_rg, but it doesn't support it on frame buffers. To fix
251 // this, we try it, and if it fails, we don't expose GL_EXT_texture_rg. 254 // this, we try it, and if it fails, we don't expose GL_EXT_texture_rg.
252 GLint fb_binding = 0; 255 GLint fb_binding = 0;
253 GLint tex_binding = 0; 256 GLint tex_binding = 0;
254 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &fb_binding); 257 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &fb_binding);
255 glGetIntegerv(GL_TEXTURE_BINDING_2D, &tex_binding); 258 glGetIntegerv(GL_TEXTURE_BINDING_2D, &tex_binding);
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 AddExtensionString("GL_CHROMIUM_color_buffer_float_rgba"); 694 AddExtensionString("GL_CHROMIUM_color_buffer_float_rgba");
692 } 695 }
693 if (statusRGB == GL_FRAMEBUFFER_COMPLETE) { 696 if (statusRGB == GL_FRAMEBUFFER_COMPLETE) {
694 validators_.texture_internal_format.AddValue(GL_RGB32F); 697 validators_.texture_internal_format.AddValue(GL_RGB32F);
695 feature_flags_.chromium_color_buffer_float_rgb = true; 698 feature_flags_.chromium_color_buffer_float_rgb = true;
696 AddExtensionString("GL_CHROMIUM_color_buffer_float_rgb"); 699 AddExtensionString("GL_CHROMIUM_color_buffer_float_rgb");
697 } 700 }
698 } 701 }
699 702
700 // Check for multisample support 703 // Check for multisample support
701 if (!workarounds_.disable_chromium_framebuffer_multisample) { 704
705 // crbug.com/527565 - On some GPUs, MSAA does not perform acceptably for
706 // rasterization. We disable it on non-WebGL contexts. For WebGL contexts
707 // we leave it up to the site to decide whether to enable MSAA.
708 bool disable_all_multisample =
709 workarounds_.disable_msaa_on_non_webgl_contexts && !IsWebGLContext();
710
711 if (!disable_all_multisample &&
712 !workarounds_.disable_chromium_framebuffer_multisample) {
702 bool ext_has_multisample = 713 bool ext_has_multisample =
703 extensions.Contains("GL_EXT_framebuffer_multisample") || 714 extensions.Contains("GL_EXT_framebuffer_multisample") ||
704 gl_version_info_->is_es3 || 715 gl_version_info_->is_es3 ||
705 gl_version_info_->is_desktop_core_profile; 716 gl_version_info_->is_desktop_core_profile;
706 if (gl_version_info_->is_angle) { 717 if (gl_version_info_->is_angle) {
707 ext_has_multisample |= 718 ext_has_multisample |=
708 extensions.Contains("GL_ANGLE_framebuffer_multisample"); 719 extensions.Contains("GL_ANGLE_framebuffer_multisample");
709 } 720 }
710 feature_flags_.use_core_framebuffer_multisample = 721 feature_flags_.use_core_framebuffer_multisample =
711 gl_version_info_->is_es3 || gl_version_info_->is_desktop_core_profile; 722 gl_version_info_->is_es3 || gl_version_info_->is_desktop_core_profile;
712 if (ext_has_multisample) { 723 if (ext_has_multisample) {
713 feature_flags_.chromium_framebuffer_multisample = true; 724 feature_flags_.chromium_framebuffer_multisample = true;
714 validators_.frame_buffer_target.AddValue(GL_READ_FRAMEBUFFER_EXT); 725 validators_.frame_buffer_target.AddValue(GL_READ_FRAMEBUFFER_EXT);
715 validators_.frame_buffer_target.AddValue(GL_DRAW_FRAMEBUFFER_EXT); 726 validators_.frame_buffer_target.AddValue(GL_DRAW_FRAMEBUFFER_EXT);
716 validators_.g_l_state.AddValue(GL_READ_FRAMEBUFFER_BINDING_EXT); 727 validators_.g_l_state.AddValue(GL_READ_FRAMEBUFFER_BINDING_EXT);
717 validators_.g_l_state.AddValue(GL_MAX_SAMPLES_EXT); 728 validators_.g_l_state.AddValue(GL_MAX_SAMPLES_EXT);
718 validators_.render_buffer_parameter.AddValue(GL_RENDERBUFFER_SAMPLES_EXT); 729 validators_.render_buffer_parameter.AddValue(GL_RENDERBUFFER_SAMPLES_EXT);
719 AddExtensionString("GL_CHROMIUM_framebuffer_multisample"); 730 AddExtensionString("GL_CHROMIUM_framebuffer_multisample");
720 } 731 }
721 } 732 }
722 733
723 if (!workarounds_.disable_multisampled_render_to_texture) { 734 if (!disable_all_multisample &&
735 !workarounds_.disable_multisampled_render_to_texture) {
724 if (extensions.Contains("GL_EXT_multisampled_render_to_texture")) { 736 if (extensions.Contains("GL_EXT_multisampled_render_to_texture")) {
725 feature_flags_.multisampled_render_to_texture = true; 737 feature_flags_.multisampled_render_to_texture = true;
726 } else if (extensions.Contains("GL_IMG_multisampled_render_to_texture")) { 738 } else if (extensions.Contains("GL_IMG_multisampled_render_to_texture")) {
727 feature_flags_.multisampled_render_to_texture = true; 739 feature_flags_.multisampled_render_to_texture = true;
728 feature_flags_.use_img_for_multisampled_render_to_texture = true; 740 feature_flags_.use_img_for_multisampled_render_to_texture = true;
729 } 741 }
730 if (feature_flags_.multisampled_render_to_texture) { 742 if (feature_flags_.multisampled_render_to_texture) {
731 validators_.render_buffer_parameter.AddValue( 743 validators_.render_buffer_parameter.AddValue(
732 GL_RENDERBUFFER_SAMPLES_EXT); 744 GL_RENDERBUFFER_SAMPLES_EXT);
733 validators_.g_l_state.AddValue(GL_MAX_SAMPLES_EXT); 745 validators_.g_l_state.AddValue(GL_MAX_SAMPLES_EXT);
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
1186 }; 1198 };
1187 if (max_draw_buffers < kTotalDrawBufferEnums) { 1199 if (max_draw_buffers < kTotalDrawBufferEnums) {
1188 validators_.g_l_state.RemoveValues( 1200 validators_.g_l_state.RemoveValues(
1189 kDrawBuffers + max_draw_buffers, 1201 kDrawBuffers + max_draw_buffers,
1190 kTotalDrawBufferEnums - max_draw_buffers); 1202 kTotalDrawBufferEnums - max_draw_buffers);
1191 } 1203 }
1192 1204
1193 unsafe_es3_apis_enabled_ = true; 1205 unsafe_es3_apis_enabled_ = true;
1194 } 1206 }
1195 1207
1208 bool FeatureInfo::IsWebGLContext() const {
1209 // Switch statement to cause a compile-time error if we miss a case.
1210 switch (context_type_) {
1211 case CONTEXT_TYPE_WEBGL1:
1212 case CONTEXT_TYPE_WEBGL2:
1213 return true;
1214 case CONTEXT_TYPE_OPENGLES2:
1215 case CONTEXT_TYPE_OPENGLES3:
1216 return false;
1217 }
1218
1219 NOTREACHED();
1220 return false;
1221 }
1222
1196 void FeatureInfo::AddExtensionString(const char* s) { 1223 void FeatureInfo::AddExtensionString(const char* s) {
1197 std::string str(s); 1224 std::string str(s);
1198 size_t pos = extensions_.find(str); 1225 size_t pos = extensions_.find(str);
1199 while (pos != std::string::npos && 1226 while (pos != std::string::npos &&
1200 pos + str.length() < extensions_.length() && 1227 pos + str.length() < extensions_.length() &&
1201 extensions_.substr(pos + str.length(), 1) != " ") { 1228 extensions_.substr(pos + str.length(), 1) != " ") {
1202 // This extension name is a substring of another. 1229 // This extension name is a substring of another.
1203 pos = extensions_.find(str, pos + str.length()); 1230 pos = extensions_.find(str, pos + str.length());
1204 } 1231 }
1205 if (pos == std::string::npos) { 1232 if (pos == std::string::npos) {
1206 extensions_ += (extensions_.empty() ? "" : " ") + str; 1233 extensions_ += (extensions_.empty() ? "" : " ") + str;
1207 } 1234 }
1208 } 1235 }
1209 1236
1210 FeatureInfo::~FeatureInfo() { 1237 FeatureInfo::~FeatureInfo() {
1211 } 1238 }
1212 1239
1213 } // namespace gles2 1240 } // namespace gles2
1214 } // namespace gpu 1241 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/feature_info.h ('k') | gpu/command_buffer/service/feature_info_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698