diff options
author | bajones@chromium.org <bajones@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-04 03:33:49 +0000 |
---|---|---|
committer | bajones@chromium.org <bajones@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-04 03:33:49 +0000 |
commit | 70dc60933f4f8feb0e5241d2c90da4e06f015809 (patch) | |
tree | 10cd7d90b3fc8c54ec89209cae5cf9edc3f8d96e /gpu/command_buffer | |
parent | a26776fe79e4960432f0a8d42dd0fa814956ca04 (diff) | |
download | chromium_src-70dc60933f4f8feb0e5241d2c90da4e06f015809.zip chromium_src-70dc60933f4f8feb0e5241d2c90da4e06f015809.tar.gz chromium_src-70dc60933f4f8feb0e5241d2c90da4e06f015809.tar.bz2 |
ANGLE DEPS roll 2245:2249
Added support for EXT_frag_depth
BUG=167037
R=gman@chromium.org, kbr@chromium.org, piman@chromium.org, zmo@chromium.org
Review URL: https://codereview.chromium.org/15846014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@203825 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer')
-rw-r--r-- | gpu/command_buffer/service/feature_info.cc | 8 | ||||
-rw-r--r-- | gpu/command_buffer/service/feature_info.h | 1 | ||||
-rw-r--r-- | gpu/command_buffer/service/feature_info_unittest.cc | 7 | ||||
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_decoder.cc | 44 | ||||
-rw-r--r-- | gpu/command_buffer/service/shader_translator.cc | 6 |
5 files changed, 51 insertions, 15 deletions
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc index 8b828e1..e45bab2 100644 --- a/gpu/command_buffer/service/feature_info.cc +++ b/gpu/command_buffer/service/feature_info.cc @@ -115,7 +115,8 @@ FeatureInfo::FeatureFlags::FeatureFlags() native_vertex_array_object(false), enable_shader_name_hashing(false), enable_samplers(false), - ext_draw_buffers(false) { + ext_draw_buffers(false), + ext_frag_depth(false) { } FeatureInfo::Workarounds::Workarounds() : @@ -616,6 +617,11 @@ void FeatureInfo::AddFeatures(const CommandLine& command_line) { } } + if (extensions.Contains("GL_EXT_frag_depth") || gfx::HasDesktopGLFeatures()) { + AddExtensionString("GL_EXT_frag_depth"); + feature_flags_.ext_frag_depth = true; + } + if (!disallowed_features_.swap_buffer_complete_callback) AddExtensionString("GL_CHROMIUM_swapbuffers_complete_callback"); diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h index ed0ec25..95b6f90 100644 --- a/gpu/command_buffer/service/feature_info.h +++ b/gpu/command_buffer/service/feature_info.h @@ -44,6 +44,7 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> { bool enable_shader_name_hashing; bool enable_samplers; bool ext_draw_buffers; + bool ext_frag_depth; }; struct Workarounds { diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc index ac10e8d..81bf43f 100644 --- a/gpu/command_buffer/service/feature_info_unittest.cc +++ b/gpu/command_buffer/service/feature_info_unittest.cc @@ -814,6 +814,13 @@ TEST_F(FeatureInfoTest, InitializeVAOsWithClientSideArrays) { EXPECT_FALSE(info_->feature_flags().native_vertex_array_object); } +TEST_F(FeatureInfoTest, InitializeEXT_frag_depth) { + SetupInitExpectations("GL_EXT_frag_depth"); + info_->Initialize(NULL); + EXPECT_TRUE(info_->feature_flags().ext_frag_depth); + EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_frag_depth")); +} + TEST_F(FeatureInfoTest, InitializeSamplersWithARBSamplerObjects) { SetupInitExpectationsWithGLVersion("GL_ARB_sampler_objects", "OpenGL 3.0"); info_->Initialize(NULL); diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 1642fe9..c4dd98b 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -74,6 +74,7 @@ namespace gles2 { namespace { static const char kOESDerivativeExtension[] = "GL_OES_standard_derivatives"; +static const char kEXTFragDepthExtension[] = "GL_EXT_frag_depth"; #if !defined(ANGLE_SH_VERSION) || ANGLE_SH_VERSION < 108 khronos_uint64_t CityHashForAngle(const char* name, unsigned int len) { @@ -1676,6 +1677,7 @@ class GLES2DecoderImpl : public GLES2Decoder { // WebGL semantics. bool force_webgl_glsl_validation_; bool derivatives_explicitly_enabled_; + bool frag_depth_explicitly_enabled_; bool compile_shader_always_succeeds_; @@ -2130,6 +2132,7 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group) reset_status_(GL_NO_ERROR), force_webgl_glsl_validation_(false), derivatives_explicitly_enabled_(false), + frag_depth_explicitly_enabled_(false), compile_shader_always_succeeds_(false), service_logging_(CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableGPUServiceLoggingGPU)), @@ -2521,6 +2524,7 @@ bool GLES2DecoderImpl::InitializeShaderTranslator() { if (force_webgl_glsl_validation_) { resources.OES_standard_derivatives = derivatives_explicitly_enabled_; + resources.EXT_frag_depth = frag_depth_explicitly_enabled_; } else { resources.OES_standard_derivatives = features().oes_standard_derivatives ? 1 : 0; @@ -2530,6 +2534,8 @@ bool GLES2DecoderImpl::InitializeShaderTranslator() { features().oes_egl_image_external ? 1 : 0; resources.EXT_draw_buffers = features().ext_draw_buffers ? 1 : 0; + resources.EXT_frag_depth = + features().ext_frag_depth ? 1 : 0; } ShShaderSpec shader_spec = force_webgl_glsl_validation_ ? SH_WEBGL_SPEC @@ -7132,16 +7138,25 @@ error::Error GLES2DecoderImpl::HandleGetString( break; case GL_EXTENSIONS: { - // For WebGL contexts, strip out the OES derivatives extension if it has - // not been enabled. - if (force_webgl_glsl_validation_ && - !derivatives_explicitly_enabled_) { + // For WebGL contexts, strip out the OES derivatives and + // EXT frag depth extensions if they have not been enabled. + if (force_webgl_glsl_validation_) { extensions = feature_info_->extensions(); - size_t offset = extensions.find(kOESDerivativeExtension); - if (std::string::npos != offset) { - extensions.replace(offset, - offset + arraysize(kOESDerivativeExtension), - std::string()); + if (!derivatives_explicitly_enabled_) { + size_t offset = extensions.find(kOESDerivativeExtension); + if (std::string::npos != offset) { + extensions.replace(offset, + offset + arraysize(kOESDerivativeExtension), + std::string()); + } + } + if (!frag_depth_explicitly_enabled_) { + size_t offset = extensions.find(kEXTFragDepthExtension); + if (std::string::npos != offset) { + extensions.replace(offset, + offset + arraysize(kEXTFragDepthExtension), + std::string()); + } } } else { extensions = feature_info_->extensions().c_str(); @@ -8866,15 +8881,20 @@ error::Error GLES2DecoderImpl::HandleRequestExtensionCHROMIUM( bool desire_webgl_glsl_validation = feature_str.find("GL_CHROMIUM_webglsl") != std::string::npos; bool desire_standard_derivatives = false; + bool desire_frag_depth = false; if (force_webgl_glsl_validation_) { desire_standard_derivatives = feature_str.find("GL_OES_standard_derivatives") != std::string::npos; + desire_frag_depth = + feature_str.find("GL_EXT_frag_depth") != std::string::npos; } if (desire_webgl_glsl_validation != force_webgl_glsl_validation_ || - desire_standard_derivatives != derivatives_explicitly_enabled_) { - force_webgl_glsl_validation_ = desire_webgl_glsl_validation; - derivatives_explicitly_enabled_ = desire_standard_derivatives; + desire_standard_derivatives != derivatives_explicitly_enabled_ || + desire_frag_depth != frag_depth_explicitly_enabled_) { + force_webgl_glsl_validation_ |= desire_webgl_glsl_validation; + derivatives_explicitly_enabled_ |= desire_standard_derivatives; + frag_depth_explicitly_enabled_ |= desire_frag_depth; InitializeShaderTranslator(); } diff --git a/gpu/command_buffer/service/shader_translator.cc b/gpu/command_buffer/service/shader_translator.cc index 3bd2a97..5129bfc 100644 --- a/gpu/command_buffer/service/shader_translator.cc +++ b/gpu/command_buffer/service/shader_translator.cc @@ -209,7 +209,7 @@ bool ShaderTranslator::Translate(const char* shader) { std::string ShaderTranslator::GetStringForOptionsThatWouldEffectCompilation() const { - const size_t kNumIntFields = 15; + const size_t kNumIntFields = 16; const size_t kNumEnumFields = 1; const size_t kNumFunctionPointerFields = 1; struct MustMatchShBuiltInResource { @@ -258,7 +258,9 @@ std::string ShaderTranslator::GetStringForOptionsThatWouldEffectCompilation() ":MaxExpressionComplexity:" + base::IntToString(compiler_options_.MaxExpressionComplexity) + ":MaxCallStackDepth:" + - base::IntToString(compiler_options_.MaxCallStackDepth)); + base::IntToString(compiler_options_.MaxCallStackDepth) + + ":EXT_frag_depth:" + + base::IntToString(compiler_options_.EXT_frag_depth)); } const char* ShaderTranslator::translated_shader() const { |