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

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

Issue 1998723002: Move code in ui/gl/* from gfx:: to gl:: (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 7 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 <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
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
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
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
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
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
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
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
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
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