From 1c13ca054965fdf2479c5fcb570613d759a9f1f4 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Mon, 9 Oct 2023 15:04:36 -0700 Subject: [PATCH 1/2] log specific framebuffer incomplete error. --- impeller/renderer/backend/gles/BUILD.gn | 1 + impeller/renderer/backend/gles/formats_gles.h | 17 +++++++++++ .../renderer/backend/gles/render_pass_gles.cc | 6 ++-- .../gles/test/formats_gles_unittests.cc | 28 +++++++++++++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 impeller/renderer/backend/gles/test/formats_gles_unittests.cc diff --git a/impeller/renderer/backend/gles/BUILD.gn b/impeller/renderer/backend/gles/BUILD.gn index 2877f2c72a684..1d783c0f8c841 100644 --- a/impeller/renderer/backend/gles/BUILD.gn +++ b/impeller/renderer/backend/gles/BUILD.gn @@ -15,6 +15,7 @@ impeller_component("gles_unittests") { testonly = true sources = [ "test/capabilities_unittests.cc", + "test/formats_gles_unittests.cc", "test/mock_gles.cc", "test/mock_gles.h", "test/mock_gles_unittests.cc", diff --git a/impeller/renderer/backend/gles/formats_gles.h b/impeller/renderer/backend/gles/formats_gles.h index 4e789707af294..421c30f1af4a7 100644 --- a/impeller/renderer/backend/gles/formats_gles.h +++ b/impeller/renderer/backend/gles/formats_gles.h @@ -194,4 +194,21 @@ constexpr std::optional ToTextureTarget(TextureType type) { FML_UNREACHABLE(); } +std::string DebugToFramebufferError(int status) { + switch (status) { + case GL_FRAMEBUFFER_UNDEFINED: + return "GL_FRAMEBUFFER_UNDEFINED"; + case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: + return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"; + case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: + return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"; + case GL_FRAMEBUFFER_UNSUPPORTED: + return "GL_FRAMEBUFFER_UNSUPPORTED"; + case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: + return "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"; + default: + return "Unknown error code: " + std::to_string(status); + } +} + } // namespace impeller diff --git a/impeller/renderer/backend/gles/render_pass_gles.cc b/impeller/renderer/backend/gles/render_pass_gles.cc index aa25492524c33..eafa6385d06f6 100644 --- a/impeller/renderer/backend/gles/render_pass_gles.cc +++ b/impeller/renderer/backend/gles/render_pass_gles.cc @@ -193,8 +193,10 @@ struct RenderPassData { } } - if (gl.CheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { - VALIDATION_LOG << "Could not create a complete frambuffer."; + auto status = gl.CheckFramebufferStatus(GL_FRAMEBUFFER); + if (status != GL_FRAMEBUFFER_COMPLETE) { + VALIDATION_LOG << "Could not create a complete frambuffer: " + << DebugToFramebufferError(status); return false; } } diff --git a/impeller/renderer/backend/gles/test/formats_gles_unittests.cc b/impeller/renderer/backend/gles/test/formats_gles_unittests.cc new file mode 100644 index 0000000000000..4e0fd114e80e3 --- /dev/null +++ b/impeller/renderer/backend/gles/test/formats_gles_unittests.cc @@ -0,0 +1,28 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "flutter/testing/testing.h" // IWYU pragma: keep +#include "gtest/gtest.h" +#include "impeller/renderer/backend/gles/formats_gles.h" + +namespace impeller { +namespace testing { + +TEST(FormatsGLES, CanFormatFramebufferErrorMessage) { + ASSERT_EQ(DebugToFramebufferError(GL_FRAMEBUFFER_UNDEFINED), + "GL_FRAMEBUFFER_UNDEFINED"); + ASSERT_EQ(DebugToFramebufferError(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT), + "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"); + ASSERT_EQ( + DebugToFramebufferError(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT), + "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"); + ASSERT_EQ(DebugToFramebufferError(GL_FRAMEBUFFER_UNSUPPORTED), + "GL_FRAMEBUFFER_UNSUPPORTED"); + ASSERT_EQ(DebugToFramebufferError(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE), + "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"); + ASSERT_EQ(DebugToFramebufferError(0), "Unknown error code: 0"); +} + +} // namespace testing +} // namespace impeller From a22149c7de9f7b36d133e61defe51382932c4dfc Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Mon, 9 Oct 2023 15:18:06 -0700 Subject: [PATCH 2/2] move to cc --- impeller/renderer/backend/gles/formats_gles.cc | 17 ++++++++++++++++- impeller/renderer/backend/gles/formats_gles.h | 17 +---------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/impeller/renderer/backend/gles/formats_gles.cc b/impeller/renderer/backend/gles/formats_gles.cc index 7d5f3b832d946..0f8b719b40869 100644 --- a/impeller/renderer/backend/gles/formats_gles.cc +++ b/impeller/renderer/backend/gles/formats_gles.cc @@ -6,6 +6,21 @@ namespace impeller { -// +std::string DebugToFramebufferError(int status) { + switch (status) { + case GL_FRAMEBUFFER_UNDEFINED: + return "GL_FRAMEBUFFER_UNDEFINED"; + case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: + return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"; + case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: + return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"; + case GL_FRAMEBUFFER_UNSUPPORTED: + return "GL_FRAMEBUFFER_UNSUPPORTED"; + case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: + return "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"; + default: + return "Unknown error code: " + std::to_string(status); + } +} } // namespace impeller diff --git a/impeller/renderer/backend/gles/formats_gles.h b/impeller/renderer/backend/gles/formats_gles.h index 421c30f1af4a7..ea56ebb6e516f 100644 --- a/impeller/renderer/backend/gles/formats_gles.h +++ b/impeller/renderer/backend/gles/formats_gles.h @@ -194,21 +194,6 @@ constexpr std::optional ToTextureTarget(TextureType type) { FML_UNREACHABLE(); } -std::string DebugToFramebufferError(int status) { - switch (status) { - case GL_FRAMEBUFFER_UNDEFINED: - return "GL_FRAMEBUFFER_UNDEFINED"; - case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: - return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"; - case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: - return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"; - case GL_FRAMEBUFFER_UNSUPPORTED: - return "GL_FRAMEBUFFER_UNSUPPORTED"; - case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: - return "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"; - default: - return "Unknown error code: " + std::to_string(status); - } -} +std::string DebugToFramebufferError(int status); } // namespace impeller