fix: disable batch_cfg for Metal when building with upstream ggml (#2311)

This commit is contained in:
Wagner Bruna authored and GitHub committed 2026-11-09 22:10:12 +08:00
1 parent fc350be2ce
commit f977addf06
1 file changed
+10
+10
View File
@@ -2440,6 +2440,15 @@ sd::Tensor<float> StableDiffusionGGML::sample(const std::shared_ptr<DiffusionMod
: sampling_init_latent; : sampling_init_latent;
sd::Tensor<float> denoised = x_t; sd::Tensor<float> 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<float>& x, float sigma, int step) -> sd::guidance::GuiderOutput { auto denoise = [&](const sd::Tensor<float>& x, float sigma, int step) -> sd::guidance::GuiderOutput {
if (get_cancel_flag() == SD_CANCEL_ALL) { if (get_cancel_flag() == SD_CANCEL_ALL) {
LOG_VERBOSE("cancelling generation"); LOG_VERBOSE("cancelling generation");
@@ -2762,6 +2771,7 @@ sd::Tensor<float> StableDiffusionGGML::sample(const std::shared_ptr<DiffusionMod
} }
const bool batch_cfg_ok = config_->params.batched_cfg && const bool batch_cfg_ok = config_->params.batched_cfg &&
batch_cfg_backend_ok &&
sd_version_is_unet(version) && sd_version_is_unet(version) &&
!uncond.empty() && !uncond.empty() &&
img_uncond.empty() && img_uncond.empty() &&