| 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/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 // get the workarounds from json file. Then we should remove this block. | 185 // get the workarounds from json file. Then we should remove this block. |
| 186 // See crbug.com/228979. | 186 // See crbug.com/228979. |
| 187 bool is_intel = false; | 187 bool is_intel = false; |
| 188 bool is_nvidia = false; | 188 bool is_nvidia = false; |
| 189 bool is_amd = false; | 189 bool is_amd = false; |
| 190 bool is_mesa = false; | 190 bool is_mesa = false; |
| 191 bool is_qualcomm = false; | 191 bool is_qualcomm = false; |
| 192 bool is_imagination = false; | 192 bool is_imagination = false; |
| 193 bool is_arm = false; | 193 bool is_arm = false; |
| 194 bool is_vivante = false; | 194 bool is_vivante = false; |
| 195 bool is_mali400 = false; |
| 195 const char* gl_strings[2]; | 196 const char* gl_strings[2]; |
| 196 gl_strings[0] = reinterpret_cast<const char*>(glGetString(GL_VENDOR)); | 197 gl_strings[0] = reinterpret_cast<const char*>(glGetString(GL_VENDOR)); |
| 197 gl_strings[1] = reinterpret_cast<const char*>(glGetString(GL_RENDERER)); | 198 gl_strings[1] = reinterpret_cast<const char*>(glGetString(GL_RENDERER)); |
| 198 if (!command_line.HasSwitch(switches::kGpuDriverBugWorkarounds) && | 199 if (!command_line.HasSwitch(switches::kGpuDriverBugWorkarounds) && |
| 199 !command_line.HasSwitch(switches::kDisableGpuDriverBugWorkarounds)) { | 200 !command_line.HasSwitch(switches::kDisableGpuDriverBugWorkarounds)) { |
| 200 for (size_t ii = 0; ii < arraysize(gl_strings); ++ii) { | 201 for (size_t ii = 0; ii < arraysize(gl_strings); ++ii) { |
| 201 const char* str = gl_strings[ii]; | 202 const char* str = gl_strings[ii]; |
| 202 if (str) { | 203 if (str) { |
| 203 std::string lstr(StringToLowerASCII(std::string(str))); | 204 std::string lstr(StringToLowerASCII(std::string(str))); |
| 204 StringSet string_set(lstr); | 205 StringSet string_set(lstr); |
| 205 is_intel |= string_set.Contains("intel"); | 206 is_intel |= string_set.Contains("intel"); |
| 206 is_nvidia |= string_set.Contains("nvidia"); | 207 is_nvidia |= string_set.Contains("nvidia"); |
| 207 is_amd |= string_set.Contains("amd") || string_set.Contains("ati"); | 208 is_amd |= string_set.Contains("amd") || string_set.Contains("ati"); |
| 208 is_mesa |= string_set.Contains("mesa"); | 209 is_mesa |= string_set.Contains("mesa"); |
| 209 is_qualcomm |= string_set.Contains("qualcomm"); | 210 is_qualcomm |= string_set.Contains("qualcomm"); |
| 210 is_imagination |= string_set.Contains("imagination"); | 211 is_imagination |= string_set.Contains("imagination"); |
| 211 is_arm |= string_set.Contains("arm"); | 212 is_arm |= string_set.Contains("arm"); |
| 212 is_vivante |= string_set.Contains("vivante"); | 213 is_vivante |= string_set.Contains("vivante"); |
| 213 is_vivante |= string_set.Contains("hisilicon"); | 214 is_vivante |= string_set.Contains("hisilicon"); |
| 215 is_mali400 |= string_set.Contains("mali-400"); |
| 214 } | 216 } |
| 215 } | 217 } |
| 216 | 218 |
| 217 if (extensions.Contains("GL_VIV_shader_binary")) | 219 if (extensions.Contains("GL_VIV_shader_binary")) |
| 218 is_vivante = true; | 220 is_vivante = true; |
| 219 | 221 |
| 220 workarounds_.set_texture_filter_before_generating_mipmap = true; | 222 workarounds_.set_texture_filter_before_generating_mipmap = true; |
| 221 workarounds_.clear_alpha_in_readpixels = true; | 223 workarounds_.clear_alpha_in_readpixels = true; |
| 222 if (is_nvidia) { | 224 if (is_nvidia) { |
| 223 workarounds_.use_current_program_after_successful_link = true; | 225 workarounds_.use_current_program_after_successful_link = true; |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 if (extensions.Contains("GL_OES_vertex_array_object") || | 409 if (extensions.Contains("GL_OES_vertex_array_object") || |
| 408 extensions.Contains("GL_ARB_vertex_array_object") || | 410 extensions.Contains("GL_ARB_vertex_array_object") || |
| 409 extensions.Contains("GL_APPLE_vertex_array_object")) { | 411 extensions.Contains("GL_APPLE_vertex_array_object")) { |
| 410 feature_flags_.native_vertex_array_object = true; | 412 feature_flags_.native_vertex_array_object = true; |
| 411 } | 413 } |
| 412 | 414 |
| 413 if (is_arm || is_imagination) { | 415 if (is_arm || is_imagination) { |
| 414 workarounds_.use_client_side_arrays_for_stream_buffers = true; | 416 workarounds_.use_client_side_arrays_for_stream_buffers = true; |
| 415 } | 417 } |
| 416 | 418 |
| 419 if (is_mali400) { |
| 420 workarounds_.use_non_zero_size_for_client_side_stream_buffers = true; |
| 421 } |
| 422 |
| 417 // If we're using client_side_arrays we have to emulate | 423 // If we're using client_side_arrays we have to emulate |
| 418 // vertex array objects since vertex array objects do not work | 424 // vertex array objects since vertex array objects do not work |
| 419 // with client side arrays. | 425 // with client side arrays. |
| 420 if (workarounds_.use_client_side_arrays_for_stream_buffers) { | 426 if (workarounds_.use_client_side_arrays_for_stream_buffers) { |
| 421 feature_flags_.native_vertex_array_object = false; | 427 feature_flags_.native_vertex_array_object = false; |
| 422 } | 428 } |
| 423 | 429 |
| 424 if (extensions.Contains("GL_OES_element_index_uint") || | 430 if (extensions.Contains("GL_OES_element_index_uint") || |
| 425 gfx::HasDesktopGLFeatures()) { | 431 gfx::HasDesktopGLFeatures()) { |
| 426 AddExtensionString("GL_OES_element_index_uint"); | 432 AddExtensionString("GL_OES_element_index_uint"); |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 722 if (extensions_.find(str) == std::string::npos) { | 728 if (extensions_.find(str) == std::string::npos) { |
| 723 extensions_ += (extensions_.empty() ? "" : " ") + str; | 729 extensions_ += (extensions_.empty() ? "" : " ") + str; |
| 724 } | 730 } |
| 725 } | 731 } |
| 726 | 732 |
| 727 FeatureInfo::~FeatureInfo() { | 733 FeatureInfo::~FeatureInfo() { |
| 728 } | 734 } |
| 729 | 735 |
| 730 } // namespace gles2 | 736 } // namespace gles2 |
| 731 } // namespace gpu | 737 } // namespace gpu |
| OLD | NEW |