Index: gpu/command_buffer/service/gles2_cmd_decoder.cc |
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
index f913c4883d5ebdb892dd908c2d97842b026ba4fc..9a7da5db2382211d3af9fb91d2128a44eb678172 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
@@ -80,6 +80,8 @@ namespace { |
static const char kOESDerivativeExtension[] = "GL_OES_standard_derivatives"; |
static const char kEXTFragDepthExtension[] = "GL_EXT_frag_depth"; |
static const char kEXTDrawBuffersExtension[] = "GL_EXT_draw_buffers"; |
+static const char kCHROMIUMColorBufferFloatExtension[] = |
+ "GL_CHROMIUM_color_buffer_float"; |
#if !defined(ANGLE_SH_VERSION) || ANGLE_SH_VERSION < 108 |
khronos_uint64_t CityHashForAngle(const char* name, unsigned int len) { |
@@ -1668,6 +1670,7 @@ class GLES2DecoderImpl : public GLES2Decoder, |
bool derivatives_explicitly_enabled_; |
bool frag_depth_explicitly_enabled_; |
bool draw_buffers_explicitly_enabled_; |
+ bool chromium_color_buffer_float_explicitly_enabled_; |
piman
2014/02/07 00:43:10
I don't think we need this. Since we decided that
oetuaho-nv
2014/02/07 09:26:58
Okay. I just got the idea from earlier reviews tha
|
bool compile_shader_always_succeeds_; |
@@ -2167,6 +2170,7 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group) |
derivatives_explicitly_enabled_(false), |
frag_depth_explicitly_enabled_(false), |
draw_buffers_explicitly_enabled_(false), |
+ chromium_color_buffer_float_explicitly_enabled_(false), |
compile_shader_always_succeeds_(false), |
service_logging_(CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kEnableGPUServiceLoggingGPU)), |
@@ -2959,7 +2963,8 @@ bool GLES2DecoderImpl::CheckFramebufferValid( |
return true; |
} |
- GLenum completeness = framebuffer->IsPossiblyComplete(); |
+ GLenum completeness = framebuffer->IsPossiblyComplete( |
+ chromium_color_buffer_float_explicitly_enabled_); |
if (completeness != GL_FRAMEBUFFER_COMPLETE) { |
LOCAL_SET_GL_ERROR( |
GL_INVALID_FRAMEBUFFER_OPERATION, func_name, "framebuffer incomplete"); |
@@ -4895,7 +4900,8 @@ GLenum GLES2DecoderImpl::DoCheckFramebufferStatus(GLenum target) { |
if (!framebuffer) { |
return GL_FRAMEBUFFER_COMPLETE; |
} |
- GLenum completeness = framebuffer->IsPossiblyComplete(); |
+ GLenum completeness = framebuffer->IsPossiblyComplete( |
+ chromium_color_buffer_float_explicitly_enabled_); |
if (completeness != GL_FRAMEBUFFER_COMPLETE) { |
return completeness; |
} |
@@ -7600,6 +7606,17 @@ error::Error GLES2DecoderImpl::HandleGetString( |
} else { |
extensions = feature_info_->extensions().c_str(); |
} |
+ // Strip out CHROMIUM_color_buffer_float for all contexts that have |
+ // not enabled it to emulate GLES2 more closely. |
+ if (!chromium_color_buffer_float_explicitly_enabled_) { |
+ size_t offset = extensions.find( |
+ kCHROMIUMColorBufferFloatExtension); |
+ if (std::string::npos != offset) { |
+ extensions.replace(offset, |
+ arraysize(kCHROMIUMColorBufferFloatExtension), |
+ std::string()); |
+ } |
+ } |
std::string surface_extensions = surface_->GetExtensions(); |
if (!surface_extensions.empty()) |
extensions += " " + surface_extensions; |
@@ -9066,6 +9083,14 @@ error::Error GLES2DecoderImpl::HandleRequestExtensionCHROMIUM( |
return error::kInvalidArguments; |
} |
+ bool desire_chromium_color_buffer_float = |
+ feature_str.find("GL_CHROMIUM_color_buffer_float") != std::string::npos; |
+ |
+ if (desire_chromium_color_buffer_float && |
+ feature_info_->feature_flags().chromium_color_buffer_float) { |
+ chromium_color_buffer_float_explicitly_enabled_ = true; |
+ } |
+ |
bool desire_webgl_glsl_validation = |
feature_str.find("GL_CHROMIUM_webglsl") != std::string::npos; |
bool desire_standard_derivatives = false; |