From f977addf06c1c18f3490bf5ed9b25d2196cd956c Mon Sep 17 00:00:00 2001 From: Wagner Bruna Date: Mon, 9 Nov 2026 11:10:12 -0300 Subject: [PATCH] fix: disable batch_cfg for Metal when building with upstream ggml (#2311) --- src/pipeline/diffusion_engine.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/pipeline/diffusion_engine.cpp b/src/pipeline/diffusion_engine.cpp index 1ec292c1..e8afbd19 100644 --- a/src/pipeline/diffusion_engine.cpp +++ b/src/pipeline/diffusion_engine.cpp @@ -2440,6 +2440,15 @@ sd::Tensor StableDiffusionGGML::sample(const std::shared_ptr denoised = x_t; +#ifdef SD_USE_UPSTREAM_GGML + // workaround for sd.cpp #2149 + const auto diffusion_backends = backend_manager.runtime_backends(SDBackendModule::DIFFUSION); + const bool batch_cfg_backend_ok = std::none_of(diffusion_backends.begin(), diffusion_backends.end(), + [](ggml_backend_t backend) { return sd_backend_is(backend, "MTL"); }); +#else + const bool batch_cfg_backend_ok = true; +#endif + auto denoise = [&](const sd::Tensor& x, float sigma, int step) -> sd::guidance::GuiderOutput { if (get_cancel_flag() == SD_CANCEL_ALL) { LOG_VERBOSE("cancelling generation"); @@ -2762,6 +2771,7 @@ sd::Tensor StableDiffusionGGML::sample(const std::shared_ptrparams.batched_cfg && + batch_cfg_backend_ok && sd_version_is_unet(version) && !uncond.empty() && img_uncond.empty() &&