summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer
diff options
context:
space:
mode:
authorbajones@chromium.org <bajones@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-04 03:33:49 +0000
committerbajones@chromium.org <bajones@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-04 03:33:49 +0000
commit70dc60933f4f8feb0e5241d2c90da4e06f015809 (patch)
tree10cd7d90b3fc8c54ec89209cae5cf9edc3f8d96e /gpu/command_buffer
parenta26776fe79e4960432f0a8d42dd0fa814956ca04 (diff)
downloadchromium_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.cc8
-rw-r--r--gpu/command_buffer/service/feature_info.h1
-rw-r--r--gpu/command_buffer/service/feature_info_unittest.cc7
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc44
-rw-r--r--gpu/command_buffer/service/shader_translator.cc6
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 {