| Index: gpu/command_buffer/service/feature_info.cc
|
| diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
|
| index 9b9c00e13fd3766e4d5298e5ccef3945d4165409..a4acdd15c4927e7548fe0e35fc3e52f1aed62aa5 100644
|
| --- a/gpu/command_buffer/service/feature_info.cc
|
| +++ b/gpu/command_buffer/service/feature_info.cc
|
| @@ -1152,18 +1152,27 @@
|
| validators_.vertex_attribute.AddValue(GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE);
|
| }
|
|
|
| - bool support_draw_buffers = gl_version_info_->is_es3 ||
|
| - gl_version_info_->is_desktop_core_profile ||
|
| - extensions.Contains("GL_ARB_draw_buffers") ||
|
| - extensions.Contains("GL_EXT_draw_buffers");
|
| - bool have_draw_buffers = !workarounds_.disable_ext_draw_buffers &&
|
| - IsWebGL1OrES2Context() && support_draw_buffers;
|
| - if (have_draw_buffers) {
|
| + bool vendor_agnostic_draw_buffers =
|
| + extensions.Contains("GL_ARB_draw_buffers") ||
|
| + extensions.Contains("GL_EXT_draw_buffers");
|
| + if (!workarounds_.disable_ext_draw_buffers &&
|
| + (vendor_agnostic_draw_buffers ||
|
| + (extensions.Contains("GL_NV_draw_buffers") &&
|
| + gl_version_info_->is_es3) ||
|
| + gl_version_info_->is_desktop_core_profile)) {
|
| AddExtensionString("GL_EXT_draw_buffers");
|
| feature_flags_.ext_draw_buffers = true;
|
| - }
|
| -
|
| - if (IsWebGL2OrES3Context() || have_draw_buffers) {
|
| +
|
| + // This flag is set to enable emulation of EXT_draw_buffers when we're
|
| + // running on GLES 3.0+, NV_draw_buffers extension is supported and
|
| + // glDrawBuffers from GLES 3.0 core has been bound. It toggles using the
|
| + // NV_draw_buffers extension directive instead of EXT_draw_buffers extension
|
| + // directive in ESSL 100 shaders translated by ANGLE, enabling them to write
|
| + // into multiple gl_FragData values, which is not by default possible in
|
| + // ESSL 100 with core GLES 3.0. For more information, see the
|
| + // NV_draw_buffers specification.
|
| + feature_flags_.nv_draw_buffers = !vendor_agnostic_draw_buffers;
|
| +
|
| GLint max_color_attachments = 0;
|
| glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &max_color_attachments);
|
| for (GLenum i = GL_COLOR_ATTACHMENT1_EXT;
|
|
|