| 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 6675ba779e7329e7179a8d58bb8fcdd8af9a62f6..8a2fd40df84c0c12f661c1c794297e1d6cc2c216 100644
|
| --- a/gpu/command_buffer/service/feature_info.cc
|
| +++ b/gpu/command_buffer/service/feature_info.cc
|
| @@ -14,6 +14,7 @@
|
| #include "base/strings/string_util.h"
|
| #include "gpu/command_buffer/service/gl_utils.h"
|
| #include "gpu/command_buffer/service/gpu_switches.h"
|
| +#include "gpu/config/gpu_switches.h"
|
| #include "ui/gl/gl_fence.h"
|
| #include "ui/gl/gl_implementation.h"
|
|
|
| @@ -153,7 +154,8 @@ FeatureInfo::FeatureFlags::FeatureFlags()
|
| blend_equation_advanced(false),
|
| blend_equation_advanced_coherent(false),
|
| ext_texture_rg(false),
|
| - enable_subscribe_uniform(false) {
|
| + enable_subscribe_uniform(false),
|
| + emulate_primitive_restart_fixed_index(false) {
|
| }
|
|
|
| FeatureInfo::Workarounds::Workarounds() :
|
| @@ -962,7 +964,7 @@ void FeatureInfo::InitializeFeatures() {
|
|
|
| if ((gl_version_info_->is_es3 ||
|
| extensions.Contains("GL_EXT_discard_framebuffer")) &&
|
| - !workarounds_.disable_ext_discard_framebuffer) {
|
| + !workarounds_.disable_discard_framebuffer) {
|
| // DiscardFramebufferEXT is automatically bound to InvalidateFramebuffer.
|
| AddExtensionString("GL_EXT_discard_framebuffer");
|
| feature_flags_.ext_discard_framebuffer = true;
|
| @@ -1050,6 +1052,13 @@ void FeatureInfo::InitializeFeatures() {
|
| gfx::GLFenceEGL::SetIgnoreFailures();
|
| }
|
| #endif
|
| +
|
| + if (gl_version_info_->IsLowerThanGL(4, 3)) {
|
| + // crbug.com/481184.
|
| + // GL_PRIMITIVE_RESTART_FIXED_INDEX is only available on Desktop GL 4.3+,
|
| + // but we emulate ES 3.0 on top of Desktop GL 4.2+.
|
| + feature_flags_.emulate_primitive_restart_fixed_index = true;
|
| + }
|
| }
|
|
|
| bool FeatureInfo::IsES3Capable() const {
|
| @@ -1071,6 +1080,60 @@ bool FeatureInfo::IsES3Capable() const {
|
| void FeatureInfo::EnableES3Validators() {
|
| DCHECK(IsES3Capable());
|
| validators_.UpdateValuesES3();
|
| +
|
| + GLint max_color_attachments = 0;
|
| + glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &max_color_attachments);
|
| + const int kTotalColorAttachmentEnums = 16;
|
| + const GLenum kColorAttachments[] = {
|
| + GL_COLOR_ATTACHMENT0,
|
| + GL_COLOR_ATTACHMENT1,
|
| + GL_COLOR_ATTACHMENT2,
|
| + GL_COLOR_ATTACHMENT3,
|
| + GL_COLOR_ATTACHMENT4,
|
| + GL_COLOR_ATTACHMENT5,
|
| + GL_COLOR_ATTACHMENT6,
|
| + GL_COLOR_ATTACHMENT7,
|
| + GL_COLOR_ATTACHMENT8,
|
| + GL_COLOR_ATTACHMENT9,
|
| + GL_COLOR_ATTACHMENT10,
|
| + GL_COLOR_ATTACHMENT11,
|
| + GL_COLOR_ATTACHMENT12,
|
| + GL_COLOR_ATTACHMENT13,
|
| + GL_COLOR_ATTACHMENT14,
|
| + GL_COLOR_ATTACHMENT15,
|
| + };
|
| + if (max_color_attachments < kTotalColorAttachmentEnums) {
|
| + validators_.attachment.RemoveValues(
|
| + kColorAttachments + max_color_attachments,
|
| + kTotalColorAttachmentEnums - max_color_attachments);
|
| + }
|
| +
|
| + GLint max_draw_buffers = 0;
|
| + glGetIntegerv(GL_MAX_DRAW_BUFFERS, &max_draw_buffers);
|
| + const int kTotalDrawBufferEnums = 16;
|
| + const GLenum kDrawBuffers[] = {
|
| + GL_DRAW_BUFFER0,
|
| + GL_DRAW_BUFFER1,
|
| + GL_DRAW_BUFFER2,
|
| + GL_DRAW_BUFFER3,
|
| + GL_DRAW_BUFFER4,
|
| + GL_DRAW_BUFFER5,
|
| + GL_DRAW_BUFFER6,
|
| + GL_DRAW_BUFFER7,
|
| + GL_DRAW_BUFFER8,
|
| + GL_DRAW_BUFFER9,
|
| + GL_DRAW_BUFFER10,
|
| + GL_DRAW_BUFFER11,
|
| + GL_DRAW_BUFFER12,
|
| + GL_DRAW_BUFFER13,
|
| + GL_DRAW_BUFFER14,
|
| + GL_DRAW_BUFFER15,
|
| + };
|
| + if (max_draw_buffers < kTotalDrawBufferEnums) {
|
| + validators_.g_l_state.RemoveValues(
|
| + kDrawBuffers + max_draw_buffers,
|
| + kTotalDrawBufferEnums - max_draw_buffers);
|
| + }
|
| }
|
|
|
| void FeatureInfo::AddExtensionString(const char* s) {
|
|
|