| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <set> | 9 #include <set> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 | 299 |
| 300 void FeatureInfo::EnableOESTextureHalfFloatLinear() { | 300 void FeatureInfo::EnableOESTextureHalfFloatLinear() { |
| 301 if (!oes_texture_half_float_linear_available_) | 301 if (!oes_texture_half_float_linear_available_) |
| 302 return; | 302 return; |
| 303 AddExtensionString("GL_OES_texture_half_float_linear"); | 303 AddExtensionString("GL_OES_texture_half_float_linear"); |
| 304 feature_flags_.enable_texture_half_float_linear = true; | 304 feature_flags_.enable_texture_half_float_linear = true; |
| 305 } | 305 } |
| 306 | 306 |
| 307 void FeatureInfo::InitializeFeatures() { | 307 void FeatureInfo::InitializeFeatures() { |
| 308 // Figure out what extensions to turn on. | 308 // Figure out what extensions to turn on. |
| 309 StringSet extensions(gfx::GetGLExtensionsFromCurrentContext()); | 309 StringSet extensions(gl::GetGLExtensionsFromCurrentContext()); |
| 310 | 310 |
| 311 const char* version_str = | 311 const char* version_str = |
| 312 reinterpret_cast<const char*>(glGetString(GL_VERSION)); | 312 reinterpret_cast<const char*>(glGetString(GL_VERSION)); |
| 313 const char* renderer_str = | 313 const char* renderer_str = |
| 314 reinterpret_cast<const char*>(glGetString(GL_RENDERER)); | 314 reinterpret_cast<const char*>(glGetString(GL_RENDERER)); |
| 315 | 315 |
| 316 gl_version_info_.reset(new gfx::GLVersionInfo( | 316 gl_version_info_.reset( |
| 317 version_str, renderer_str, extensions.GetImpl())); | 317 new gl::GLVersionInfo(version_str, renderer_str, extensions.GetImpl())); |
| 318 | 318 |
| 319 AddExtensionString("GL_ANGLE_translated_shader_source"); | 319 AddExtensionString("GL_ANGLE_translated_shader_source"); |
| 320 AddExtensionString("GL_CHROMIUM_async_pixel_transfers"); | 320 AddExtensionString("GL_CHROMIUM_async_pixel_transfers"); |
| 321 AddExtensionString("GL_CHROMIUM_bind_uniform_location"); | 321 AddExtensionString("GL_CHROMIUM_bind_uniform_location"); |
| 322 AddExtensionString("GL_CHROMIUM_command_buffer_query"); | 322 AddExtensionString("GL_CHROMIUM_command_buffer_query"); |
| 323 AddExtensionString("GL_CHROMIUM_command_buffer_latency_query"); | 323 AddExtensionString("GL_CHROMIUM_command_buffer_latency_query"); |
| 324 AddExtensionString("GL_CHROMIUM_copy_texture"); | 324 AddExtensionString("GL_CHROMIUM_copy_texture"); |
| 325 AddExtensionString("GL_CHROMIUM_get_error_query"); | 325 AddExtensionString("GL_CHROMIUM_get_error_query"); |
| 326 AddExtensionString("GL_CHROMIUM_lose_context"); | 326 AddExtensionString("GL_CHROMIUM_lose_context"); |
| 327 AddExtensionString("GL_CHROMIUM_pixel_transfer_buffer_object"); | 327 AddExtensionString("GL_CHROMIUM_pixel_transfer_buffer_object"); |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 | 525 |
| 526 // If we're using client_side_arrays we have to emulate | 526 // If we're using client_side_arrays we have to emulate |
| 527 // vertex array objects since vertex array objects do not work | 527 // vertex array objects since vertex array objects do not work |
| 528 // with client side arrays. | 528 // with client side arrays. |
| 529 if (workarounds_.use_client_side_arrays_for_stream_buffers) { | 529 if (workarounds_.use_client_side_arrays_for_stream_buffers) { |
| 530 feature_flags_.native_vertex_array_object = false; | 530 feature_flags_.native_vertex_array_object = false; |
| 531 } | 531 } |
| 532 | 532 |
| 533 if (gl_version_info_->is_es3 || | 533 if (gl_version_info_->is_es3 || |
| 534 extensions.Contains("GL_OES_element_index_uint") || | 534 extensions.Contains("GL_OES_element_index_uint") || |
| 535 gfx::HasDesktopGLFeatures()) { | 535 gl::HasDesktopGLFeatures()) { |
| 536 AddExtensionString("GL_OES_element_index_uint"); | 536 AddExtensionString("GL_OES_element_index_uint"); |
| 537 validators_.index_type.AddValue(GL_UNSIGNED_INT); | 537 validators_.index_type.AddValue(GL_UNSIGNED_INT); |
| 538 } | 538 } |
| 539 | 539 |
| 540 // With EXT_sRGB, unsized SRGB_EXT and SRGB_ALPHA_EXT are accepted by the | 540 // With EXT_sRGB, unsized SRGB_EXT and SRGB_ALPHA_EXT are accepted by the |
| 541 // <format> and <internalformat> parameter of TexImage2D. GLES3 adds support | 541 // <format> and <internalformat> parameter of TexImage2D. GLES3 adds support |
| 542 // for SRGB Textures but the accepted internal formats for TexImage2D are only | 542 // for SRGB Textures but the accepted internal formats for TexImage2D are only |
| 543 // sized formats GL_SRGB8 and GL_SRGB8_ALPHA8. Also, SRGB_EXT isn't a valid | 543 // sized formats GL_SRGB8 and GL_SRGB8_ALPHA8. Also, SRGB_EXT isn't a valid |
| 544 // <format> in this case. So, even with GLES3 explicitly check for | 544 // <format> in this case. So, even with GLES3 explicitly check for |
| 545 // GL_EXT_sRGB. | 545 // GL_EXT_sRGB. |
| 546 if ((((gl_version_info_->is_es3 || | 546 if ((((gl_version_info_->is_es3 || |
| 547 extensions.Contains("GL_OES_rgb8_rgba8")) && | 547 extensions.Contains("GL_OES_rgb8_rgba8")) && |
| 548 extensions.Contains("GL_EXT_sRGB")) || | 548 extensions.Contains("GL_EXT_sRGB")) || |
| 549 gfx::HasDesktopGLFeatures()) && | 549 gl::HasDesktopGLFeatures()) && |
| 550 (context_type_ == CONTEXT_TYPE_WEBGL1 || | 550 (context_type_ == CONTEXT_TYPE_WEBGL1 || |
| 551 context_type_ == CONTEXT_TYPE_OPENGLES2)) { | 551 context_type_ == CONTEXT_TYPE_OPENGLES2)) { |
| 552 AddExtensionString("GL_EXT_sRGB"); | 552 AddExtensionString("GL_EXT_sRGB"); |
| 553 validators_.texture_internal_format.AddValue(GL_SRGB_EXT); | 553 validators_.texture_internal_format.AddValue(GL_SRGB_EXT); |
| 554 validators_.texture_internal_format.AddValue(GL_SRGB_ALPHA_EXT); | 554 validators_.texture_internal_format.AddValue(GL_SRGB_ALPHA_EXT); |
| 555 validators_.texture_format.AddValue(GL_SRGB_EXT); | 555 validators_.texture_format.AddValue(GL_SRGB_EXT); |
| 556 validators_.texture_format.AddValue(GL_SRGB_ALPHA_EXT); | 556 validators_.texture_format.AddValue(GL_SRGB_ALPHA_EXT); |
| 557 validators_.render_buffer_format.AddValue(GL_SRGB8_ALPHA8_EXT); | 557 validators_.render_buffer_format.AddValue(GL_SRGB8_ALPHA8_EXT); |
| 558 validators_.frame_buffer_parameter.AddValue( | 558 validators_.frame_buffer_parameter.AddValue( |
| 559 GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT); | 559 GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 // glGetInteger64v. The GPUTimer class which implements timer queries can also | 640 // glGetInteger64v. The GPUTimer class which implements timer queries can also |
| 641 // fallback to an implementation that does not depend on glGetInteger64v on | 641 // fallback to an implementation that does not depend on glGetInteger64v on |
| 642 // ES2. Thus we can enable GL_EXT_disjoint_timer_query on ES2 contexts even | 642 // ES2. Thus we can enable GL_EXT_disjoint_timer_query on ES2 contexts even |
| 643 // though it does not support glGetInteger64v due to a specification bug. | 643 // though it does not support glGetInteger64v due to a specification bug. |
| 644 if (extensions.Contains("GL_EXT_disjoint_timer_query") || | 644 if (extensions.Contains("GL_EXT_disjoint_timer_query") || |
| 645 extensions.Contains("GL_ARB_timer_query") || | 645 extensions.Contains("GL_ARB_timer_query") || |
| 646 extensions.Contains("GL_EXT_timer_query")) { | 646 extensions.Contains("GL_EXT_timer_query")) { |
| 647 AddExtensionString("GL_EXT_disjoint_timer_query"); | 647 AddExtensionString("GL_EXT_disjoint_timer_query"); |
| 648 } | 648 } |
| 649 | 649 |
| 650 if (extensions.Contains("GL_OES_rgb8_rgba8") || gfx::HasDesktopGLFeatures()) { | 650 if (extensions.Contains("GL_OES_rgb8_rgba8") || gl::HasDesktopGLFeatures()) { |
| 651 AddExtensionString("GL_OES_rgb8_rgba8"); | 651 AddExtensionString("GL_OES_rgb8_rgba8"); |
| 652 validators_.render_buffer_format.AddValue(GL_RGB8_OES); | 652 validators_.render_buffer_format.AddValue(GL_RGB8_OES); |
| 653 validators_.render_buffer_format.AddValue(GL_RGBA8_OES); | 653 validators_.render_buffer_format.AddValue(GL_RGBA8_OES); |
| 654 } | 654 } |
| 655 | 655 |
| 656 // Check if we should allow GL_OES_texture_npot | 656 // Check if we should allow GL_OES_texture_npot |
| 657 if (!disallowed_features_.npot_support && | 657 if (!disallowed_features_.npot_support && |
| 658 (gl_version_info_->is_es3 || | 658 (gl_version_info_->is_es3 || |
| 659 gl_version_info_->is_desktop_core_profile || | 659 gl_version_info_->is_desktop_core_profile || |
| 660 extensions.Contains("GL_ARB_texture_non_power_of_two") || | 660 extensions.Contains("GL_ARB_texture_non_power_of_two") || |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 875 feature_flags_.ext_multisample_compatibility = true; | 875 feature_flags_.ext_multisample_compatibility = true; |
| 876 validators_.capability.AddValue(GL_MULTISAMPLE_EXT); | 876 validators_.capability.AddValue(GL_MULTISAMPLE_EXT); |
| 877 validators_.capability.AddValue(GL_SAMPLE_ALPHA_TO_ONE_EXT); | 877 validators_.capability.AddValue(GL_SAMPLE_ALPHA_TO_ONE_EXT); |
| 878 } | 878 } |
| 879 | 879 |
| 880 if (extensions.Contains("GL_INTEL_framebuffer_CMAA")) { | 880 if (extensions.Contains("GL_INTEL_framebuffer_CMAA")) { |
| 881 feature_flags_.chromium_screen_space_antialiasing = true; | 881 feature_flags_.chromium_screen_space_antialiasing = true; |
| 882 AddExtensionString("GL_CHROMIUM_screen_space_antialiasing"); | 882 AddExtensionString("GL_CHROMIUM_screen_space_antialiasing"); |
| 883 } | 883 } |
| 884 | 884 |
| 885 if (extensions.Contains("GL_OES_depth24") || gfx::HasDesktopGLFeatures() || | 885 if (extensions.Contains("GL_OES_depth24") || gl::HasDesktopGLFeatures() || |
| 886 gl_version_info_->is_es3) { | 886 gl_version_info_->is_es3) { |
| 887 AddExtensionString("GL_OES_depth24"); | 887 AddExtensionString("GL_OES_depth24"); |
| 888 feature_flags_.oes_depth24 = true; | 888 feature_flags_.oes_depth24 = true; |
| 889 validators_.render_buffer_format.AddValue(GL_DEPTH_COMPONENT24); | 889 validators_.render_buffer_format.AddValue(GL_DEPTH_COMPONENT24); |
| 890 } | 890 } |
| 891 | 891 |
| 892 if (gl_version_info_->is_es3 || | 892 if (gl_version_info_->is_es3 || |
| 893 extensions.Contains("GL_OES_standard_derivatives") || | 893 extensions.Contains("GL_OES_standard_derivatives") || |
| 894 gfx::HasDesktopGLFeatures()) { | 894 gl::HasDesktopGLFeatures()) { |
| 895 AddExtensionString("GL_OES_standard_derivatives"); | 895 AddExtensionString("GL_OES_standard_derivatives"); |
| 896 feature_flags_.oes_standard_derivatives = true; | 896 feature_flags_.oes_standard_derivatives = true; |
| 897 validators_.hint_target.AddValue(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES); | 897 validators_.hint_target.AddValue(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES); |
| 898 validators_.g_l_state.AddValue(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES); | 898 validators_.g_l_state.AddValue(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES); |
| 899 } | 899 } |
| 900 | 900 |
| 901 if (extensions.Contains("GL_OES_EGL_image_external")) { | 901 if (extensions.Contains("GL_OES_EGL_image_external")) { |
| 902 AddExtensionString("GL_OES_EGL_image_external"); | 902 AddExtensionString("GL_OES_EGL_image_external"); |
| 903 feature_flags_.oes_egl_image_external = true; | 903 feature_flags_.oes_egl_image_external = true; |
| 904 } | 904 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 972 // Rectangle textures are used as samplers via glBindTexture, framebuffer | 972 // Rectangle textures are used as samplers via glBindTexture, framebuffer |
| 973 // textures via glFramebufferTexture2D, and copy destinations via | 973 // textures via glFramebufferTexture2D, and copy destinations via |
| 974 // glCopyPixels. | 974 // glCopyPixels. |
| 975 validators_.texture_bind_target.AddValue(GL_TEXTURE_RECTANGLE_ARB); | 975 validators_.texture_bind_target.AddValue(GL_TEXTURE_RECTANGLE_ARB); |
| 976 validators_.texture_target.AddValue(GL_TEXTURE_RECTANGLE_ARB); | 976 validators_.texture_target.AddValue(GL_TEXTURE_RECTANGLE_ARB); |
| 977 validators_.get_tex_param_target.AddValue(GL_TEXTURE_RECTANGLE_ARB); | 977 validators_.get_tex_param_target.AddValue(GL_TEXTURE_RECTANGLE_ARB); |
| 978 validators_.g_l_state.AddValue(GL_TEXTURE_BINDING_RECTANGLE_ARB); | 978 validators_.g_l_state.AddValue(GL_TEXTURE_BINDING_RECTANGLE_ARB); |
| 979 } | 979 } |
| 980 | 980 |
| 981 #if defined(OS_MACOSX) | 981 #if defined(OS_MACOSX) |
| 982 if (gfx::GetGLImplementation() != gfx::kGLImplementationOSMesaGL) { | 982 if (gl::GetGLImplementation() != gl::kGLImplementationOSMesaGL) { |
| 983 AddExtensionString("GL_CHROMIUM_iosurface"); | 983 AddExtensionString("GL_CHROMIUM_iosurface"); |
| 984 AddExtensionString("GL_CHROMIUM_ycbcr_420v_image"); | 984 AddExtensionString("GL_CHROMIUM_ycbcr_420v_image"); |
| 985 feature_flags_.chromium_image_ycbcr_420v = true; | 985 feature_flags_.chromium_image_ycbcr_420v = true; |
| 986 } | 986 } |
| 987 #endif | 987 #endif |
| 988 | 988 |
| 989 if (extensions.Contains("GL_APPLE_ycbcr_422")) { | 989 if (extensions.Contains("GL_APPLE_ycbcr_422")) { |
| 990 AddExtensionString("GL_CHROMIUM_ycbcr_422_image"); | 990 AddExtensionString("GL_CHROMIUM_ycbcr_422_image"); |
| 991 feature_flags_.chromium_image_ycbcr_422 = true; | 991 feature_flags_.chromium_image_ycbcr_422 = true; |
| 992 } | 992 } |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1091 validators_.g_l_state.AddValue(GL_MAX_DRAW_BUFFERS_ARB); | 1091 validators_.g_l_state.AddValue(GL_MAX_DRAW_BUFFERS_ARB); |
| 1092 GLint max_draw_buffers = 0; | 1092 GLint max_draw_buffers = 0; |
| 1093 glGetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &max_draw_buffers); | 1093 glGetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &max_draw_buffers); |
| 1094 for (GLenum i = GL_DRAW_BUFFER0_ARB; | 1094 for (GLenum i = GL_DRAW_BUFFER0_ARB; |
| 1095 i < static_cast<GLenum>(GL_DRAW_BUFFER0_ARB + max_draw_buffers); | 1095 i < static_cast<GLenum>(GL_DRAW_BUFFER0_ARB + max_draw_buffers); |
| 1096 ++i) { | 1096 ++i) { |
| 1097 validators_.g_l_state.AddValue(i); | 1097 validators_.g_l_state.AddValue(i); |
| 1098 } | 1098 } |
| 1099 } | 1099 } |
| 1100 | 1100 |
| 1101 if (gl_version_info_->is_es3 || | 1101 if (gl_version_info_->is_es3 || extensions.Contains("GL_EXT_blend_minmax") || |
| 1102 extensions.Contains("GL_EXT_blend_minmax") || | 1102 gl::HasDesktopGLFeatures()) { |
| 1103 gfx::HasDesktopGLFeatures()) { | |
| 1104 AddExtensionString("GL_EXT_blend_minmax"); | 1103 AddExtensionString("GL_EXT_blend_minmax"); |
| 1105 validators_.equation.AddValue(GL_MIN_EXT); | 1104 validators_.equation.AddValue(GL_MIN_EXT); |
| 1106 validators_.equation.AddValue(GL_MAX_EXT); | 1105 validators_.equation.AddValue(GL_MAX_EXT); |
| 1107 static_assert(GL_MIN_EXT == GL_MIN && GL_MAX_EXT == GL_MAX, | 1106 static_assert(GL_MIN_EXT == GL_MIN && GL_MAX_EXT == GL_MAX, |
| 1108 "min & max variations must match"); | 1107 "min & max variations must match"); |
| 1109 } | 1108 } |
| 1110 | 1109 |
| 1111 // TODO(dshwang): GLES3 supports gl_FragDepth, not gl_FragDepthEXT. | 1110 // TODO(dshwang): GLES3 supports gl_FragDepth, not gl_FragDepthEXT. |
| 1112 if (extensions.Contains("GL_EXT_frag_depth") || gfx::HasDesktopGLFeatures()) { | 1111 if (extensions.Contains("GL_EXT_frag_depth") || gl::HasDesktopGLFeatures()) { |
| 1113 AddExtensionString("GL_EXT_frag_depth"); | 1112 AddExtensionString("GL_EXT_frag_depth"); |
| 1114 feature_flags_.ext_frag_depth = true; | 1113 feature_flags_.ext_frag_depth = true; |
| 1115 } | 1114 } |
| 1116 | 1115 |
| 1117 if (extensions.Contains("GL_EXT_shader_texture_lod") || | 1116 if (extensions.Contains("GL_EXT_shader_texture_lod") || |
| 1118 gfx::HasDesktopGLFeatures()) { | 1117 gl::HasDesktopGLFeatures()) { |
| 1119 AddExtensionString("GL_EXT_shader_texture_lod"); | 1118 AddExtensionString("GL_EXT_shader_texture_lod"); |
| 1120 feature_flags_.ext_shader_texture_lod = true; | 1119 feature_flags_.ext_shader_texture_lod = true; |
| 1121 } | 1120 } |
| 1122 | 1121 |
| 1123 bool ui_gl_fence_works = gfx::GLFence::IsSupported(); | 1122 bool ui_gl_fence_works = gl::GLFence::IsSupported(); |
| 1124 UMA_HISTOGRAM_BOOLEAN("GPU.FenceSupport", ui_gl_fence_works); | 1123 UMA_HISTOGRAM_BOOLEAN("GPU.FenceSupport", ui_gl_fence_works); |
| 1125 | 1124 |
| 1126 feature_flags_.map_buffer_range = | 1125 feature_flags_.map_buffer_range = |
| 1127 gl_version_info_->is_es3 || | 1126 gl_version_info_->is_es3 || |
| 1128 gl_version_info_->is_desktop_core_profile || | 1127 gl_version_info_->is_desktop_core_profile || |
| 1129 extensions.Contains("GL_ARB_map_buffer_range") || | 1128 extensions.Contains("GL_ARB_map_buffer_range") || |
| 1130 extensions.Contains("GL_EXT_map_buffer_range"); | 1129 extensions.Contains("GL_EXT_map_buffer_range"); |
| 1131 | 1130 |
| 1132 // Really it's part of core OpenGL 2.1 and up, but let's assume the | 1131 // Really it's part of core OpenGL 2.1 and up, but let's assume the |
| 1133 // extension is still advertised. | 1132 // extension is still advertised. |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1271 validators_.dst_blend_factor.AddValue(GL_SRC1_COLOR_EXT); | 1270 validators_.dst_blend_factor.AddValue(GL_SRC1_COLOR_EXT); |
| 1272 validators_.src_blend_factor.AddValue(GL_ONE_MINUS_SRC1_COLOR_EXT); | 1271 validators_.src_blend_factor.AddValue(GL_ONE_MINUS_SRC1_COLOR_EXT); |
| 1273 validators_.dst_blend_factor.AddValue(GL_ONE_MINUS_SRC1_COLOR_EXT); | 1272 validators_.dst_blend_factor.AddValue(GL_ONE_MINUS_SRC1_COLOR_EXT); |
| 1274 validators_.src_blend_factor.AddValue(GL_ONE_MINUS_SRC1_ALPHA_EXT); | 1273 validators_.src_blend_factor.AddValue(GL_ONE_MINUS_SRC1_ALPHA_EXT); |
| 1275 validators_.dst_blend_factor.AddValue(GL_ONE_MINUS_SRC1_ALPHA_EXT); | 1274 validators_.dst_blend_factor.AddValue(GL_ONE_MINUS_SRC1_ALPHA_EXT); |
| 1276 validators_.g_l_state.AddValue(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT); | 1275 validators_.g_l_state.AddValue(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT); |
| 1277 } | 1276 } |
| 1278 | 1277 |
| 1279 #if !defined(OS_MACOSX) | 1278 #if !defined(OS_MACOSX) |
| 1280 if (workarounds_.ignore_egl_sync_failures) { | 1279 if (workarounds_.ignore_egl_sync_failures) { |
| 1281 gfx::GLFenceEGL::SetIgnoreFailures(); | 1280 gl::GLFenceEGL::SetIgnoreFailures(); |
| 1282 } | 1281 } |
| 1283 #endif | 1282 #endif |
| 1284 | 1283 |
| 1285 if (workarounds_.avoid_egl_image_target_texture_reuse) { | 1284 if (workarounds_.avoid_egl_image_target_texture_reuse) { |
| 1286 TextureDefinition::AvoidEGLTargetTextureReuse(); | 1285 TextureDefinition::AvoidEGLTargetTextureReuse(); |
| 1287 } | 1286 } |
| 1288 | 1287 |
| 1289 if (gl_version_info_->IsLowerThanGL(4, 3)) { | 1288 if (gl_version_info_->IsLowerThanGL(4, 3)) { |
| 1290 // crbug.com/481184. | 1289 // crbug.com/481184. |
| 1291 // GL_PRIMITIVE_RESTART_FIXED_INDEX is only available on Desktop GL 4.3+, | 1290 // GL_PRIMITIVE_RESTART_FIXED_INDEX is only available on Desktop GL 4.3+, |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1395 if (pos == std::string::npos) { | 1394 if (pos == std::string::npos) { |
| 1396 extensions_ += (extensions_.empty() ? "" : " ") + str; | 1395 extensions_ += (extensions_.empty() ? "" : " ") + str; |
| 1397 } | 1396 } |
| 1398 } | 1397 } |
| 1399 | 1398 |
| 1400 FeatureInfo::~FeatureInfo() { | 1399 FeatureInfo::~FeatureInfo() { |
| 1401 } | 1400 } |
| 1402 | 1401 |
| 1403 } // namespace gles2 | 1402 } // namespace gles2 |
| 1404 } // namespace gpu | 1403 } // namespace gpu |
| OLD | NEW |