OLD | NEW |
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 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS))); | 229 reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS))); |
230 | 230 |
231 bool npot_ok = false; | 231 bool npot_ok = false; |
232 | 232 |
233 const char* renderer_str = | 233 const char* renderer_str = |
234 reinterpret_cast<const char*>(glGetString(GL_RENDERER)); | 234 reinterpret_cast<const char*>(glGetString(GL_RENDERER)); |
235 if (renderer_str) { | 235 if (renderer_str) { |
236 feature_flags_.is_angle = StartsWithASCII(renderer_str, "ANGLE", true); | 236 feature_flags_.is_angle = StartsWithASCII(renderer_str, "ANGLE", true); |
237 } | 237 } |
238 | 238 |
| 239 bool is_es = false; |
239 bool is_es3 = false; | 240 bool is_es3 = false; |
240 const char* version_str = | 241 const char* version_str = |
241 reinterpret_cast<const char*>(glGetString(GL_VERSION)); | 242 reinterpret_cast<const char*>(glGetString(GL_VERSION)); |
242 if (version_str) { | 243 if (version_str) { |
243 std::string lstr(base::StringToLowerASCII(std::string(version_str))); | 244 std::string lstr(base::StringToLowerASCII(std::string(version_str))); |
| 245 is_es = (lstr.substr(0, 9) == "opengl es"); |
244 is_es3 = (lstr.substr(0, 12) == "opengl es 3."); | 246 is_es3 = (lstr.substr(0, 12) == "opengl es 3."); |
245 } | 247 } |
246 | 248 |
247 AddExtensionString("GL_ANGLE_translated_shader_source"); | 249 AddExtensionString("GL_ANGLE_translated_shader_source"); |
248 AddExtensionString("GL_CHROMIUM_async_pixel_transfers"); | 250 AddExtensionString("GL_CHROMIUM_async_pixel_transfers"); |
249 AddExtensionString("GL_CHROMIUM_bind_uniform_location"); | 251 AddExtensionString("GL_CHROMIUM_bind_uniform_location"); |
250 AddExtensionString("GL_CHROMIUM_command_buffer_query"); | 252 AddExtensionString("GL_CHROMIUM_command_buffer_query"); |
251 AddExtensionString("GL_CHROMIUM_command_buffer_latency_query"); | 253 AddExtensionString("GL_CHROMIUM_command_buffer_latency_query"); |
252 AddExtensionString("GL_CHROMIUM_copy_texture"); | 254 AddExtensionString("GL_CHROMIUM_copy_texture"); |
253 AddExtensionString("GL_CHROMIUM_get_error_query"); | 255 AddExtensionString("GL_CHROMIUM_get_error_query"); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 | 391 |
390 if (extensions.Contains("GL_OES_element_index_uint") || | 392 if (extensions.Contains("GL_OES_element_index_uint") || |
391 gfx::HasDesktopGLFeatures()) { | 393 gfx::HasDesktopGLFeatures()) { |
392 AddExtensionString("GL_OES_element_index_uint"); | 394 AddExtensionString("GL_OES_element_index_uint"); |
393 validators_.index_type.AddValue(GL_UNSIGNED_INT); | 395 validators_.index_type.AddValue(GL_UNSIGNED_INT); |
394 } | 396 } |
395 | 397 |
396 bool enable_texture_format_bgra8888 = false; | 398 bool enable_texture_format_bgra8888 = false; |
397 bool enable_read_format_bgra = false; | 399 bool enable_read_format_bgra = false; |
398 bool enable_render_buffer_bgra = false; | 400 bool enable_render_buffer_bgra = false; |
| 401 // Only APPLE_texture_format_BGRA8888 extension allows BGRA8_EXT in GLES's |
| 402 // glTexStorage2D. |
| 403 bool enable_immutable_texture_format_bgra_on_es = |
| 404 extensions.Contains("GL_APPLE_texture_format_BGRA8888"); |
399 | 405 |
400 // Check if we should allow GL_EXT_texture_format_BGRA8888 | 406 // Check if we should allow GL_EXT_texture_format_BGRA8888 |
401 if (extensions.Contains("GL_EXT_texture_format_BGRA8888") || | 407 if (extensions.Contains("GL_EXT_texture_format_BGRA8888") || |
402 extensions.Contains("GL_APPLE_texture_format_BGRA8888") || | 408 enable_immutable_texture_format_bgra_on_es || |
403 extensions.Contains("GL_EXT_bgra")) { | 409 extensions.Contains("GL_EXT_bgra")) { |
404 enable_texture_format_bgra8888 = true; | 410 enable_texture_format_bgra8888 = true; |
405 } | 411 } |
406 | 412 |
407 if (extensions.Contains("GL_EXT_bgra")) { | 413 if (extensions.Contains("GL_EXT_bgra")) { |
408 enable_render_buffer_bgra = true; | 414 enable_render_buffer_bgra = true; |
409 } | 415 } |
410 | 416 |
411 if (extensions.Contains("GL_EXT_read_format_bgra") || | 417 if (extensions.Contains("GL_EXT_read_format_bgra") || |
412 extensions.Contains("GL_EXT_bgra")) { | 418 extensions.Contains("GL_EXT_bgra")) { |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 validators_.pixel_store.AddValue(GL_PACK_REVERSE_ROW_ORDER_ANGLE); | 691 validators_.pixel_store.AddValue(GL_PACK_REVERSE_ROW_ORDER_ANGLE); |
686 validators_.g_l_state.AddValue(GL_PACK_REVERSE_ROW_ORDER_ANGLE); | 692 validators_.g_l_state.AddValue(GL_PACK_REVERSE_ROW_ORDER_ANGLE); |
687 } | 693 } |
688 | 694 |
689 if (extensions.Contains("GL_ANGLE_texture_usage")) { | 695 if (extensions.Contains("GL_ANGLE_texture_usage")) { |
690 feature_flags_.angle_texture_usage = true; | 696 feature_flags_.angle_texture_usage = true; |
691 AddExtensionString("GL_ANGLE_texture_usage"); | 697 AddExtensionString("GL_ANGLE_texture_usage"); |
692 validators_.texture_parameter.AddValue(GL_TEXTURE_USAGE_ANGLE); | 698 validators_.texture_parameter.AddValue(GL_TEXTURE_USAGE_ANGLE); |
693 } | 699 } |
694 | 700 |
695 if (extensions.Contains("GL_EXT_texture_storage")) { | 701 // Disable it if BGRA8_EXT isn't allowed. |
| 702 bool support_bgra = (enable_texture_format_bgra8888 && !is_es) || |
| 703 (enable_immutable_texture_format_bgra_on_es && is_es); |
| 704 if (support_bgra && |
| 705 (extensions.Contains("GL_EXT_texture_storage") || |
| 706 extensions.Contains("GL_ARB_texture_storage") || is_es3)) { |
696 feature_flags_.ext_texture_storage = true; | 707 feature_flags_.ext_texture_storage = true; |
697 AddExtensionString("GL_EXT_texture_storage"); | 708 AddExtensionString("GL_EXT_texture_storage"); |
698 validators_.texture_parameter.AddValue(GL_TEXTURE_IMMUTABLE_FORMAT_EXT); | 709 validators_.texture_parameter.AddValue(GL_TEXTURE_IMMUTABLE_FORMAT_EXT); |
699 if (enable_texture_format_bgra8888) | 710 if (enable_texture_format_bgra8888) |
700 validators_.texture_internal_format_storage.AddValue(GL_BGRA8_EXT); | 711 validators_.texture_internal_format_storage.AddValue(GL_BGRA8_EXT); |
701 if (enable_texture_float) { | 712 if (enable_texture_float) { |
702 validators_.texture_internal_format_storage.AddValue(GL_RGBA32F_EXT); | 713 validators_.texture_internal_format_storage.AddValue(GL_RGBA32F_EXT); |
703 validators_.texture_internal_format_storage.AddValue(GL_RGB32F_EXT); | 714 validators_.texture_internal_format_storage.AddValue(GL_RGB32F_EXT); |
704 validators_.texture_internal_format_storage.AddValue(GL_ALPHA32F_EXT); | 715 validators_.texture_internal_format_storage.AddValue(GL_ALPHA32F_EXT); |
705 validators_.texture_internal_format_storage.AddValue( | 716 validators_.texture_internal_format_storage.AddValue( |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
854 if (pos == std::string::npos) { | 865 if (pos == std::string::npos) { |
855 extensions_ += (extensions_.empty() ? "" : " ") + str; | 866 extensions_ += (extensions_.empty() ? "" : " ") + str; |
856 } | 867 } |
857 } | 868 } |
858 | 869 |
859 FeatureInfo::~FeatureInfo() { | 870 FeatureInfo::~FeatureInfo() { |
860 } | 871 } |
861 | 872 |
862 } // namespace gles2 | 873 } // namespace gles2 |
863 } // namespace gpu | 874 } // namespace gpu |
OLD | NEW |