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() &&