Chromium Code Reviews| 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 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 221 disallowed_features_ = disallowed_features; | 221 disallowed_features_ = disallowed_features; |
| 222 InitializeFeatures(); | 222 InitializeFeatures(); |
| 223 return true; | 223 return true; |
| 224 } | 224 } |
| 225 | 225 |
| 226 void FeatureInfo::InitializeFeatures() { | 226 void FeatureInfo::InitializeFeatures() { |
| 227 // Figure out what extensions to turn on. | 227 // Figure out what extensions to turn on. |
| 228 StringSet extensions( | 228 StringSet extensions( |
| 229 reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS))); | 229 reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS))); |
| 230 | 230 |
| 231 bool npot_ok = false; | |
| 232 | |
| 233 const char* renderer_str = | 231 const char* renderer_str = |
| 234 reinterpret_cast<const char*>(glGetString(GL_RENDERER)); | 232 reinterpret_cast<const char*>(glGetString(GL_RENDERER)); |
| 235 if (renderer_str) { | 233 if (renderer_str) { |
| 236 feature_flags_.is_angle = StartsWithASCII(renderer_str, "ANGLE", true); | 234 feature_flags_.is_angle = StartsWithASCII(renderer_str, "ANGLE", true); |
| 237 } | 235 } |
| 238 | 236 |
| 239 bool is_es3 = false; | 237 bool is_es3 = false; |
| 240 const char* version_str = | 238 const char* version_str = |
| 241 reinterpret_cast<const char*>(glGetString(GL_VERSION)); | 239 reinterpret_cast<const char*>(glGetString(GL_VERSION)); |
| 242 if (version_str) { | 240 if (version_str) { |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 367 if (enable_depth_texture) { | 365 if (enable_depth_texture) { |
| 368 texture_format_validators_[GL_DEPTH_STENCIL] | 366 texture_format_validators_[GL_DEPTH_STENCIL] |
| 369 .AddValue(GL_UNSIGNED_INT_24_8); | 367 .AddValue(GL_UNSIGNED_INT_24_8); |
| 370 validators_.texture_internal_format.AddValue(GL_DEPTH_STENCIL); | 368 validators_.texture_internal_format.AddValue(GL_DEPTH_STENCIL); |
| 371 validators_.texture_format.AddValue(GL_DEPTH_STENCIL); | 369 validators_.texture_format.AddValue(GL_DEPTH_STENCIL); |
| 372 validators_.pixel_type.AddValue(GL_UNSIGNED_INT_24_8); | 370 validators_.pixel_type.AddValue(GL_UNSIGNED_INT_24_8); |
| 373 } | 371 } |
| 374 validators_.render_buffer_format.AddValue(GL_DEPTH24_STENCIL8); | 372 validators_.render_buffer_format.AddValue(GL_DEPTH24_STENCIL8); |
| 375 } | 373 } |
| 376 | 374 |
| 377 if (extensions.Contains("GL_OES_vertex_array_object") || | 375 if (is_es3 || extensions.Contains("GL_OES_vertex_array_object") || |
| 378 extensions.Contains("GL_ARB_vertex_array_object") || | 376 extensions.Contains("GL_ARB_vertex_array_object") || |
| 379 extensions.Contains("GL_APPLE_vertex_array_object")) { | 377 extensions.Contains("GL_APPLE_vertex_array_object")) { |
| 380 feature_flags_.native_vertex_array_object = true; | 378 feature_flags_.native_vertex_array_object = true; |
| 381 } | 379 } |
| 382 | 380 |
| 383 // If we're using client_side_arrays we have to emulate | 381 // If we're using client_side_arrays we have to emulate |
| 384 // vertex array objects since vertex array objects do not work | 382 // vertex array objects since vertex array objects do not work |
| 385 // with client side arrays. | 383 // with client side arrays. |
| 386 if (workarounds_.use_client_side_arrays_for_stream_buffers) { | 384 if (workarounds_.use_client_side_arrays_for_stream_buffers) { |
| 387 feature_flags_.native_vertex_array_object = false; | 385 feature_flags_.native_vertex_array_object = false; |
| 388 } | 386 } |
| 389 | 387 |
| 390 if (extensions.Contains("GL_OES_element_index_uint") || | 388 if (is_es3 || extensions.Contains("GL_OES_element_index_uint") || |
| 391 gfx::HasDesktopGLFeatures()) { | 389 gfx::HasDesktopGLFeatures()) { |
| 392 AddExtensionString("GL_OES_element_index_uint"); | 390 AddExtensionString("GL_OES_element_index_uint"); |
| 393 validators_.index_type.AddValue(GL_UNSIGNED_INT); | 391 validators_.index_type.AddValue(GL_UNSIGNED_INT); |
| 394 } | 392 } |
| 395 | 393 |
| 396 bool enable_texture_format_bgra8888 = false; | 394 bool enable_texture_format_bgra8888 = false; |
| 397 bool enable_read_format_bgra = false; | 395 bool enable_read_format_bgra = false; |
| 398 bool enable_render_buffer_bgra = false; | 396 bool enable_render_buffer_bgra = false; |
| 399 | 397 |
| 400 // Check if we should allow GL_EXT_texture_format_BGRA8888 | 398 // Check if we should allow GL_EXT_texture_format_BGRA8888 |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 431 validators_.render_buffer_format.AddValue(GL_BGRA8_EXT); | 429 validators_.render_buffer_format.AddValue(GL_BGRA8_EXT); |
| 432 } | 430 } |
| 433 | 431 |
| 434 if (extensions.Contains("GL_OES_rgb8_rgba8") || gfx::HasDesktopGLFeatures()) { | 432 if (extensions.Contains("GL_OES_rgb8_rgba8") || gfx::HasDesktopGLFeatures()) { |
| 435 AddExtensionString("GL_OES_rgb8_rgba8"); | 433 AddExtensionString("GL_OES_rgb8_rgba8"); |
| 436 validators_.render_buffer_format.AddValue(GL_RGB8_OES); | 434 validators_.render_buffer_format.AddValue(GL_RGB8_OES); |
| 437 validators_.render_buffer_format.AddValue(GL_RGBA8_OES); | 435 validators_.render_buffer_format.AddValue(GL_RGBA8_OES); |
| 438 } | 436 } |
| 439 | 437 |
| 440 // Check if we should allow GL_OES_texture_npot | 438 // Check if we should allow GL_OES_texture_npot |
| 441 if (extensions.Contains("GL_ARB_texture_non_power_of_two") || | 439 if (is_es3 || extensions.Contains("GL_ARB_texture_non_power_of_two") || |
| 442 extensions.Contains("GL_OES_texture_npot")) { | 440 extensions.Contains("GL_OES_texture_npot")) { |
| 443 AddExtensionString("GL_OES_texture_npot"); | 441 AddExtensionString("GL_OES_texture_npot"); |
| 444 npot_ok = true; | 442 feature_flags_.npot_ok |= true; |
|
piman
2014/08/28 18:17:39
nit: feature_flags_.npot_ok = true
dshwang
2014/08/29 07:49:09
Done.
| |
| 445 } | 443 } |
| 446 | 444 |
| 447 // Check if we should allow GL_OES_texture_float, GL_OES_texture_half_float, | 445 // Check if we should allow GL_OES_texture_float, GL_OES_texture_half_float, |
| 448 // GL_OES_texture_float_linear, GL_OES_texture_half_float_linear | 446 // GL_OES_texture_float_linear, GL_OES_texture_half_float_linear |
| 449 bool enable_texture_float = false; | 447 bool enable_texture_float = false; |
| 450 bool enable_texture_float_linear = false; | 448 bool enable_texture_float_linear = false; |
| 451 bool enable_texture_half_float = false; | 449 bool enable_texture_half_float = false; |
| 452 bool enable_texture_half_float_linear = false; | 450 bool enable_texture_half_float_linear = false; |
| 453 | 451 |
| 454 bool may_enable_chromium_color_buffer_float = false; | 452 bool may_enable_chromium_color_buffer_float = false; |
| 455 | 453 |
| 456 if (extensions.Contains("GL_ARB_texture_float")) { | 454 if (extensions.Contains("GL_ARB_texture_float")) { |
| 457 enable_texture_float = true; | 455 enable_texture_float = true; |
| 458 enable_texture_float_linear = true; | 456 enable_texture_float_linear = true; |
| 459 enable_texture_half_float = true; | 457 enable_texture_half_float = true; |
| 460 enable_texture_half_float_linear = true; | 458 enable_texture_half_float_linear = true; |
| 461 may_enable_chromium_color_buffer_float = true; | 459 may_enable_chromium_color_buffer_float = true; |
| 462 } else { | 460 } else { |
| 463 if (extensions.Contains("GL_OES_texture_float")) { | 461 if (is_es3 || extensions.Contains("GL_OES_texture_float")) { |
| 464 enable_texture_float = true; | 462 enable_texture_float = true; |
| 465 if (extensions.Contains("GL_OES_texture_float_linear")) { | 463 if (extensions.Contains("GL_OES_texture_float_linear")) { |
| 466 enable_texture_float_linear = true; | 464 enable_texture_float_linear = true; |
| 467 } | 465 } |
| 468 if ((is_es3 && extensions.Contains("GL_EXT_color_buffer_float")) || | 466 if ((is_es3 && extensions.Contains("GL_EXT_color_buffer_float")) || |
| 469 feature_flags_.is_angle) { | 467 feature_flags_.is_angle) { |
| 470 may_enable_chromium_color_buffer_float = true; | 468 may_enable_chromium_color_buffer_float = true; |
| 471 } | 469 } |
| 472 } | 470 } |
| 473 if (extensions.Contains("GL_OES_texture_half_float")) { | 471 if (is_es3 || extensions.Contains("GL_OES_texture_half_float")) { |
| 474 enable_texture_half_float = true; | 472 enable_texture_half_float = true; |
| 475 if (extensions.Contains("GL_OES_texture_half_float_linear")) { | 473 if (is_es3 || extensions.Contains("GL_OES_texture_half_float_linear")) { |
| 476 enable_texture_half_float_linear = true; | 474 enable_texture_half_float_linear = true; |
| 477 } | 475 } |
| 478 } | 476 } |
| 479 } | 477 } |
| 480 | 478 |
| 481 if (enable_texture_float) { | 479 if (enable_texture_float) { |
| 482 texture_format_validators_[GL_ALPHA].AddValue(GL_FLOAT); | 480 texture_format_validators_[GL_ALPHA].AddValue(GL_FLOAT); |
| 483 texture_format_validators_[GL_RGB].AddValue(GL_FLOAT); | 481 texture_format_validators_[GL_RGB].AddValue(GL_FLOAT); |
| 484 texture_format_validators_[GL_RGBA].AddValue(GL_FLOAT); | 482 texture_format_validators_[GL_RGBA].AddValue(GL_FLOAT); |
| 485 texture_format_validators_[GL_LUMINANCE].AddValue(GL_FLOAT); | 483 texture_format_validators_[GL_LUMINANCE].AddValue(GL_FLOAT); |
| 486 texture_format_validators_[GL_LUMINANCE_ALPHA].AddValue(GL_FLOAT); | 484 texture_format_validators_[GL_LUMINANCE_ALPHA].AddValue(GL_FLOAT); |
| 487 validators_.pixel_type.AddValue(GL_FLOAT); | 485 validators_.pixel_type.AddValue(GL_FLOAT); |
| 488 validators_.read_pixel_type.AddValue(GL_FLOAT); | 486 validators_.read_pixel_type.AddValue(GL_FLOAT); |
| 489 AddExtensionString("GL_OES_texture_float"); | 487 AddExtensionString("GL_OES_texture_float"); |
| 490 if (enable_texture_float_linear) { | 488 if (enable_texture_float_linear) { |
| 491 AddExtensionString("GL_OES_texture_float_linear"); | 489 AddExtensionString("GL_OES_texture_float_linear"); |
| 492 } | 490 } |
| 493 } | 491 } |
| 494 | 492 |
| 495 if (enable_texture_half_float) { | 493 if (enable_texture_half_float) { |
| 496 texture_format_validators_[GL_ALPHA].AddValue(GL_HALF_FLOAT_OES); | 494 texture_format_validators_[GL_ALPHA].AddValue(GL_HALF_FLOAT_OES); |
|
dshwang
2014/08/29 07:49:09
I exclude half_float support because GL_HALF_FLOAT
| |
| 497 texture_format_validators_[GL_RGB].AddValue(GL_HALF_FLOAT_OES); | 495 texture_format_validators_[GL_RGB].AddValue(GL_HALF_FLOAT_OES); |
| 498 texture_format_validators_[GL_RGBA].AddValue(GL_HALF_FLOAT_OES); | 496 texture_format_validators_[GL_RGBA].AddValue(GL_HALF_FLOAT_OES); |
| 499 texture_format_validators_[GL_LUMINANCE].AddValue(GL_HALF_FLOAT_OES); | 497 texture_format_validators_[GL_LUMINANCE].AddValue(GL_HALF_FLOAT_OES); |
| 500 texture_format_validators_[GL_LUMINANCE_ALPHA].AddValue(GL_HALF_FLOAT_OES); | 498 texture_format_validators_[GL_LUMINANCE_ALPHA].AddValue(GL_HALF_FLOAT_OES); |
| 501 validators_.pixel_type.AddValue(GL_HALF_FLOAT_OES); | 499 validators_.pixel_type.AddValue(GL_HALF_FLOAT_OES); |
| 502 validators_.read_pixel_type.AddValue(GL_HALF_FLOAT_OES); | 500 validators_.read_pixel_type.AddValue(GL_HALF_FLOAT_OES); |
| 503 AddExtensionString("GL_OES_texture_half_float"); | 501 AddExtensionString("GL_OES_texture_half_float"); |
| 504 if (enable_texture_half_float_linear) { | 502 if (enable_texture_half_float_linear) { |
| 505 AddExtensionString("GL_OES_texture_half_float_linear"); | 503 AddExtensionString("GL_OES_texture_half_float_linear"); |
| 506 } | 504 } |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 597 } | 595 } |
| 598 | 596 |
| 599 if (extensions.Contains("GL_OES_depth24") || gfx::HasDesktopGLFeatures() || | 597 if (extensions.Contains("GL_OES_depth24") || gfx::HasDesktopGLFeatures() || |
| 600 is_es3) { | 598 is_es3) { |
| 601 AddExtensionString("GL_OES_depth24"); | 599 AddExtensionString("GL_OES_depth24"); |
| 602 feature_flags_.oes_depth24 = true; | 600 feature_flags_.oes_depth24 = true; |
| 603 validators_.render_buffer_format.AddValue(GL_DEPTH_COMPONENT24); | 601 validators_.render_buffer_format.AddValue(GL_DEPTH_COMPONENT24); |
| 604 } | 602 } |
| 605 | 603 |
| 606 if (!workarounds_.disable_oes_standard_derivatives && | 604 if (!workarounds_.disable_oes_standard_derivatives && |
| 607 (extensions.Contains("GL_OES_standard_derivatives") || | 605 (is_es3 || extensions.Contains("GL_OES_standard_derivatives") || |
| 608 gfx::HasDesktopGLFeatures())) { | 606 gfx::HasDesktopGLFeatures())) { |
| 609 AddExtensionString("GL_OES_standard_derivatives"); | 607 AddExtensionString("GL_OES_standard_derivatives"); |
| 610 feature_flags_.oes_standard_derivatives = true; | 608 feature_flags_.oes_standard_derivatives = true; |
| 611 validators_.hint_target.AddValue(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES); | 609 validators_.hint_target.AddValue(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES); |
| 612 validators_.g_l_state.AddValue(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES); | 610 validators_.g_l_state.AddValue(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES); |
| 613 } | 611 } |
| 614 | 612 |
| 615 if (extensions.Contains("GL_OES_EGL_image_external")) { | 613 if (extensions.Contains("GL_OES_EGL_image_external")) { |
| 616 AddExtensionString("GL_OES_EGL_image_external"); | 614 AddExtensionString("GL_OES_EGL_image_external"); |
| 617 feature_flags_.oes_egl_image_external = true; | 615 feature_flags_.oes_egl_image_external = true; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 670 #if defined(OS_MACOSX) | 668 #if defined(OS_MACOSX) |
| 671 AddExtensionString("GL_CHROMIUM_iosurface"); | 669 AddExtensionString("GL_CHROMIUM_iosurface"); |
| 672 #endif | 670 #endif |
| 673 | 671 |
| 674 // TODO(gman): Add support for these extensions. | 672 // TODO(gman): Add support for these extensions. |
| 675 // GL_OES_depth32 | 673 // GL_OES_depth32 |
| 676 | 674 |
| 677 feature_flags_.enable_texture_float_linear |= enable_texture_float_linear; | 675 feature_flags_.enable_texture_float_linear |= enable_texture_float_linear; |
| 678 feature_flags_.enable_texture_half_float_linear |= | 676 feature_flags_.enable_texture_half_float_linear |= |
| 679 enable_texture_half_float_linear; | 677 enable_texture_half_float_linear; |
| 680 feature_flags_.npot_ok |= npot_ok; | |
| 681 | 678 |
| 682 if (extensions.Contains("GL_ANGLE_pack_reverse_row_order")) { | 679 if (extensions.Contains("GL_ANGLE_pack_reverse_row_order")) { |
| 683 AddExtensionString("GL_ANGLE_pack_reverse_row_order"); | 680 AddExtensionString("GL_ANGLE_pack_reverse_row_order"); |
| 684 feature_flags_.angle_pack_reverse_row_order = true; | 681 feature_flags_.angle_pack_reverse_row_order = true; |
| 685 validators_.pixel_store.AddValue(GL_PACK_REVERSE_ROW_ORDER_ANGLE); | 682 validators_.pixel_store.AddValue(GL_PACK_REVERSE_ROW_ORDER_ANGLE); |
| 686 validators_.g_l_state.AddValue(GL_PACK_REVERSE_ROW_ORDER_ANGLE); | 683 validators_.g_l_state.AddValue(GL_PACK_REVERSE_ROW_ORDER_ANGLE); |
| 687 } | 684 } |
| 688 | 685 |
| 689 if (extensions.Contains("GL_ANGLE_texture_usage")) { | 686 if (extensions.Contains("GL_ANGLE_texture_usage")) { |
| 690 feature_flags_.angle_texture_usage = true; | 687 feature_flags_.angle_texture_usage = true; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 749 } | 746 } |
| 750 | 747 |
| 751 if (!workarounds_.disable_ext_draw_buffers && | 748 if (!workarounds_.disable_ext_draw_buffers && |
| 752 (extensions.Contains("GL_ARB_draw_buffers") || | 749 (extensions.Contains("GL_ARB_draw_buffers") || |
| 753 extensions.Contains("GL_EXT_draw_buffers"))) { | 750 extensions.Contains("GL_EXT_draw_buffers"))) { |
| 754 AddExtensionString("GL_EXT_draw_buffers"); | 751 AddExtensionString("GL_EXT_draw_buffers"); |
| 755 feature_flags_.ext_draw_buffers = true; | 752 feature_flags_.ext_draw_buffers = true; |
| 756 | 753 |
| 757 GLint max_color_attachments = 0; | 754 GLint max_color_attachments = 0; |
| 758 glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &max_color_attachments); | 755 glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &max_color_attachments); |
| 759 for (GLenum i = GL_COLOR_ATTACHMENT1_EXT; | 756 for (GLenum i = GL_COLOR_ATTACHMENT0_EXT; |
|
piman
2014/08/28 18:17:39
nit: GL_COLOR_ATTACHMENT0_EXT is already in valida
| |
| 760 i < static_cast<GLenum>(GL_COLOR_ATTACHMENT0 + max_color_attachments); | 757 i < static_cast<GLenum>(GL_COLOR_ATTACHMENT0_EXT + |
| 758 max_color_attachments); | |
| 761 ++i) { | 759 ++i) { |
| 762 validators_.attachment.AddValue(i); | 760 validators_.attachment.AddValue(i); |
| 763 } | 761 } |
| 764 | 762 |
| 765 validators_.g_l_state.AddValue(GL_MAX_COLOR_ATTACHMENTS_EXT); | 763 validators_.g_l_state.AddValue(GL_MAX_COLOR_ATTACHMENTS_EXT); |
| 766 validators_.g_l_state.AddValue(GL_MAX_DRAW_BUFFERS_ARB); | 764 validators_.g_l_state.AddValue(GL_MAX_DRAW_BUFFERS_ARB); |
| 767 GLint max_draw_buffers = 0; | 765 GLint max_draw_buffers = 0; |
| 768 glGetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &max_draw_buffers); | 766 glGetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &max_draw_buffers); |
| 769 for (GLenum i = GL_DRAW_BUFFER0_ARB; | 767 for (GLenum i = GL_DRAW_BUFFER0_ARB; |
| 770 i < static_cast<GLenum>(GL_DRAW_BUFFER0_ARB + max_draw_buffers); | 768 i < static_cast<GLenum>(GL_DRAW_BUFFER0_ARB + max_draw_buffers); |
| 771 ++i) { | 769 ++i) { |
| 772 validators_.g_l_state.AddValue(i); | 770 validators_.g_l_state.AddValue(i); |
| 773 } | 771 } |
| 774 } | 772 } |
| 775 | 773 |
| 776 if (extensions.Contains("GL_EXT_blend_minmax") || | 774 if (is_es3 || extensions.Contains("GL_EXT_blend_minmax") || |
| 777 gfx::HasDesktopGLFeatures()) { | 775 gfx::HasDesktopGLFeatures()) { |
| 778 AddExtensionString("GL_EXT_blend_minmax"); | 776 AddExtensionString("GL_EXT_blend_minmax"); |
| 779 validators_.equation.AddValue(GL_MIN_EXT); | 777 validators_.equation.AddValue(GL_MIN_EXT); |
| 780 validators_.equation.AddValue(GL_MAX_EXT); | 778 validators_.equation.AddValue(GL_MAX_EXT); |
| 781 } | 779 } |
| 782 | 780 |
| 781 // TODO(dshwang): GLES3 supports gl_FragDepth, not gl_FragDepthEXT. | |
| 783 if (extensions.Contains("GL_EXT_frag_depth") || gfx::HasDesktopGLFeatures()) { | 782 if (extensions.Contains("GL_EXT_frag_depth") || gfx::HasDesktopGLFeatures()) { |
| 784 AddExtensionString("GL_EXT_frag_depth"); | 783 AddExtensionString("GL_EXT_frag_depth"); |
| 785 feature_flags_.ext_frag_depth = true; | 784 feature_flags_.ext_frag_depth = true; |
| 786 } | 785 } |
| 787 | 786 |
| 788 if (extensions.Contains("GL_EXT_shader_texture_lod") || | 787 if (extensions.Contains("GL_EXT_shader_texture_lod") || |
| 789 gfx::HasDesktopGLFeatures()) { | 788 gfx::HasDesktopGLFeatures()) { |
| 790 AddExtensionString("GL_EXT_shader_texture_lod"); | 789 AddExtensionString("GL_EXT_shader_texture_lod"); |
| 791 feature_flags_.ext_shader_texture_lod = true; | 790 feature_flags_.ext_shader_texture_lod = true; |
| 792 } | 791 } |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 854 if (pos == std::string::npos) { | 853 if (pos == std::string::npos) { |
| 855 extensions_ += (extensions_.empty() ? "" : " ") + str; | 854 extensions_ += (extensions_.empty() ? "" : " ") + str; |
| 856 } | 855 } |
| 857 } | 856 } |
| 858 | 857 |
| 859 FeatureInfo::~FeatureInfo() { | 858 FeatureInfo::~FeatureInfo() { |
| 860 } | 859 } |
| 861 | 860 |
| 862 } // namespace gles2 | 861 } // namespace gles2 |
| 863 } // namespace gpu | 862 } // namespace gpu |
| OLD | NEW |