From 4bf88ce2b0e4b9e4fe667fbb2a1a1c35bc6e433f Mon Sep 17 00:00:00 2001 From: "aelias@chromium.org" Date: Wed, 12 Dec 2012 05:31:02 +0000 Subject: Enable virtual context on IMG devices only. This adds booleans to feature_info for all the common Android vendors and turns on virtual contexts for IMG only, as there are remaining bugs with the other architectures (and IMG is the main reason we are working on virtual contexts to begin with). Setting the command-line flag will force-enable virtual contexts on any architecture. BUG=160710,165531 Review URL: https://chromiumcodereview.appspot.com/11555010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@172535 0039d316-1c4b-4281-b951-d872f2087c98 --- gpu/command_buffer/service/feature_info.cc | 23 ++++++++++++++++++----- gpu/command_buffer/service/feature_info.h | 1 + 2 files changed, 19 insertions(+), 5 deletions(-) (limited to 'gpu') diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc index 26bc4ea..0a207336 100644 --- a/gpu/command_buffer/service/feature_info.cc +++ b/gpu/command_buffer/service/feature_info.cc @@ -82,7 +82,8 @@ FeatureInfo::FeatureFlags::FeatureFlags() use_arb_occlusion_query_for_occlusion_query_boolean(false), native_vertex_array_object(false), disable_workarounds(false), - enable_shader_name_hashing(false) { + enable_shader_name_hashing(false), + enable_virtual_context(false) { } FeatureInfo::Workarounds::Workarounds() @@ -207,9 +208,13 @@ void FeatureInfo::AddFeatures(const char* desired_features) { GL_RENDERER, }; bool is_intel = false; - bool is_nvidia = false; + bool is_nvidia_desktop = false; bool is_amd = false; bool is_mesa = false; + bool is_nvidia_tegra = false; + bool is_img = false; + bool is_arm = false; + bool is_qualcomm = false; for (size_t ii = 0; ii < arraysize(string_ids); ++ii) { const char* str = reinterpret_cast( glGetString(string_ids[ii])); @@ -217,9 +222,16 @@ void FeatureInfo::AddFeatures(const char* desired_features) { std::string lstr(StringToLowerASCII(std::string(str))); StringSet string_set(lstr); is_intel |= string_set.Contains("intel"); - is_nvidia |= string_set.Contains("nvidia"); + is_nvidia_desktop |= string_set.Contains("nvidia"); is_amd |= string_set.Contains("amd") || string_set.Contains("ati"); is_mesa |= string_set.Contains("mesa"); + + is_nvidia_tegra |= string_set.Contains("tegra"); + if (is_nvidia_tegra) + is_nvidia_desktop = false; + is_img |= string_set.Contains("imagination"); + is_arm |= string_set.Contains("arm"); + is_qualcomm |= string_set.Contains("qualcomm"); } } @@ -231,6 +243,7 @@ void FeatureInfo::AddFeatures(const char* desired_features) { CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableShaderNameHashing); + feature_flags_.enable_virtual_context = is_img; bool npot_ok = false; @@ -659,12 +672,12 @@ void FeatureInfo::AddFeatures(const char* desired_features) { workarounds_.set_texture_filter_before_generating_mipmap = true; workarounds_.clear_alpha_in_readpixels = true; - if (is_nvidia) { + if (is_nvidia_desktop) { workarounds_.use_current_program_after_successful_link = true; } #if defined(OS_MACOSX) - workarounds_.needs_offscreen_buffer_workaround = is_nvidia; + workarounds_.needs_offscreen_buffer_workaround = is_nvidia_desktop; workarounds_.needs_glsl_built_in_function_emulation = is_amd; if ((is_amd || is_intel) && diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h index ec03789..a9fb832 100644 --- a/gpu/command_buffer/service/feature_info.h +++ b/gpu/command_buffer/service/feature_info.h @@ -42,6 +42,7 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted { bool native_vertex_array_object; bool disable_workarounds; bool enable_shader_name_hashing; + bool enable_virtual_context; }; struct Workarounds { -- cgit v1.1