From 1119a9ba327fb86cb03f303539ce5b9697158379 Mon Sep 17 00:00:00 2001
From: TellowKrinkle <tellowkrinkle@gmail.com>
Date: Sun, 29 Jan 2023 14:35:23 -0600
Subject: [PATCH] VideoCommon: Don't create pipelines with no render targets

Some backends don't like it when you do that
---
 Source/Core/VideoCommon/PostProcessing.cpp | 3 +++
 Source/Core/VideoCommon/RenderBase.cpp     | 7 +++++++
 2 files changed, 10 insertions(+)

diff --git a/Source/Core/VideoCommon/PostProcessing.cpp b/Source/Core/VideoCommon/PostProcessing.cpp
index 69e4327bdd..0a1e995c15 100644
--- a/Source/Core/VideoCommon/PostProcessing.cpp
+++ b/Source/Core/VideoCommon/PostProcessing.cpp
@@ -709,6 +709,9 @@ bool PostProcessing::CompilePixelShader()
 
 bool PostProcessing::CompilePipeline()
 {
+  if (m_framebuffer_format == AbstractTextureFormat::Undefined)
+    return true;  // Not needed (some backends don't like making pipelines with no targets)
+
   AbstractPipelineConfig config = {};
   config.vertex_shader = m_vertex_shader.get();
   config.geometry_shader =
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp
index b4a40195c7..209fa8293a 100644
--- a/Source/Core/VideoCommon/RenderBase.cpp
+++ b/Source/Core/VideoCommon/RenderBase.cpp
@@ -1068,6 +1068,13 @@ bool Renderer::InitializeImGui()
 
 bool Renderer::RecompileImGuiPipeline()
 {
+  if (m_backbuffer_format == AbstractTextureFormat::Undefined)
+  {
+    // No backbuffer (nogui) means no imgui rendering will happen
+    // Some backends don't like making pipelines with no render targets
+    return true;
+  }
+
   std::unique_ptr<AbstractShader> vertex_shader =
       CreateShaderFromSource(ShaderStage::Vertex, FramebufferShaderGen::GenerateImGuiVertexShader(),
                              "ImGui vertex shader");