@@ -1165,12 +1165,17 @@ class StableDiffusionGGML {
11651165 bool has_unconditioned = cfg_scale != img_cfg_scale && uncond.c_crossattn != nullptr ;
11661166 bool has_img_uncond = img_cfg_scale != 1.0 && img_uncond.c_crossattn != nullptr ;
11671167
1168+ GGML_ASSERT (has_conditionned || has_unconditioned || has_img_uncond);
1169+
11681170 // denoise wrapper
1169- struct ggml_tensor * out_cond = ggml_dup_tensor (work_ctx, x) ;
1171+ struct ggml_tensor * out_cond = nullptr ;
11701172 struct ggml_tensor * out_uncond = nullptr ;
11711173 struct ggml_tensor * out_skip = nullptr ;
11721174 struct ggml_tensor * out_img_cond = nullptr ;
11731175
1176+ if (has_conditionned) {
1177+ out_cond = ggml_dup_tensor (work_ctx, x);
1178+ }
11741179 if (has_unconditioned) {
11751180 out_uncond = ggml_dup_tensor (work_ctx, x);
11761181 }
@@ -1281,15 +1286,15 @@ class StableDiffusionGGML {
12811286 negative_data = (float *)out_uncond->data ;
12821287 }
12831288
1284- float * img_cond_data = nullptr ;
1289+ float * img_uncond_data = nullptr ;
12851290 if (has_img_uncond) {
12861291 diffusion_params.context = img_uncond.c_crossattn ;
12871292 diffusion_params.c_concat = img_uncond.c_concat ;
12881293 diffusion_params.y = img_uncond.c_vector ;
12891294 work_diffusion_model->compute (n_threads,
12901295 diffusion_params,
12911296 &out_img_cond);
1292- img_cond_data = (float *)out_img_cond->data ;
1297+ img_uncond_data = (float *)out_img_cond->data ;
12931298 }
12941299
12951300 int step_count = sigmas.size ();
@@ -1329,15 +1334,15 @@ class StableDiffusionGGML {
13291334 if (has_unconditioned) {
13301335 // out_uncond + cfg_scale * (out_cond - out_uncond)
13311336 if (has_img_uncond) {
1332- // out_uncond + text_cfg_scale * (out_cond - out_img_cond ) + image_cfg_scale * (out_img_cond - out_uncond )
1333- latent_result = negative_data [i] + img_cfg_scale * (img_cond_data [i] - negative_data [i]) + cfg_scale * (positive_data[i] - img_cond_data [i]);
1337+ // out_uncond + text_cfg_scale * (out_cond - out_txt_uncond ) + image_cfg_scale * (out_txt_uncond - out_txtimg_uncond )
1338+ latent_result = img_uncond_data [i] + img_cfg_scale * (negative_data [i] - img_uncond_data [i]) + cfg_scale * (positive_data[i] - negative_data [i]);
13341339 } else {
1335- // img_cfg_scale == cfg_scale
1340+ // img_cfg_scale == 1
13361341 latent_result = negative_data[i] + cfg_scale * (positive_data[i] - negative_data[i]);
13371342 }
13381343 } else if (has_img_uncond) {
1339- // img_cfg_scale == 1
1340- latent_result = img_cond_data [i] + cfg_scale * (positive_data[i] - img_cond_data [i]);
1344+ // img_cfg_scale == cfg_scale
1345+ latent_result = img_uncond_data [i] + cfg_scale * (positive_data[i] - img_uncond_data [i]);
13411346 }
13421347 if (is_skiplayer_step) {
13431348 latent_result = latent_result + slg_scale * (positive_data[i] - skip_layer_data[i]);
0 commit comments