diff --git a/Source/Core/VideoBackends/Metal/MTLObjectCache.mm b/Source/Core/VideoBackends/Metal/MTLObjectCache.mm index 48a8ad7dae..979c1b7627 100644 --- a/Source/Core/VideoBackends/Metal/MTLObjectCache.mm +++ b/Source/Core/VideoBackends/Metal/MTLObjectCache.mm @@ -418,6 +418,12 @@ public: // clang-format on } FramebufferState fs = config.framebuffer_state; + if (fs.color_texture_format == AbstractTextureFormat::Undefined && + fs.depth_texture_format == AbstractTextureFormat::Undefined) + { + // Intel HD 4000's Metal driver asserts if you try to make one of these + PanicAlertFmt("Attempted to create pipeline with no render targets!"); + } [desc setRasterSampleCount:fs.samples]; [color0 setPixelFormat:Util::FromAbstract(fs.color_texture_format)]; [desc setDepthAttachmentPixelFormat:Util::FromAbstract(fs.depth_texture_format)]; 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 vertex_shader = CreateShaderFromSource(ShaderStage::Vertex, FramebufferShaderGen::GenerateImGuiVertexShader(), "ImGui vertex shader");