@@ -1161,12 +1161,17 @@ class StableDiffusionGGML {
11611161 bool has_unconditioned = cfg_scale != img_cfg_scale && uncond.c_crossattn != nullptr ;
11621162 bool has_img_uncond = img_cfg_scale != 1.0 && img_uncond.c_crossattn != nullptr ;
11631163
1164+ GGML_ASSERT (has_conditionned || has_unconditioned || has_img_uncond);
1165+
11641166 // denoise wrapper
1165- struct ggml_tensor * out_cond = ggml_dup_tensor (work_ctx, x) ;
1167+ struct ggml_tensor * out_cond = nullptr ;
11661168 struct ggml_tensor * out_uncond = nullptr ;
11671169 struct ggml_tensor * out_skip = nullptr ;
11681170 struct ggml_tensor * out_img_cond = nullptr ;
11691171
1172+ if (has_conditionned) {
1173+ out_cond = ggml_dup_tensor (work_ctx, x);
1174+ }
11701175 if (has_unconditioned) {
11711176 out_uncond = ggml_dup_tensor (work_ctx, x);
11721177 }
@@ -1277,15 +1282,15 @@ class StableDiffusionGGML {
12771282 negative_data = (float *)out_uncond->data ;
12781283 }
12791284
1280- float * img_cond_data = nullptr ;
1285+ float * img_uncond_data = nullptr ;
12811286 if (has_img_uncond) {
12821287 diffusion_params.context = img_uncond.c_crossattn ;
12831288 diffusion_params.c_concat = img_uncond.c_concat ;
12841289 diffusion_params.y = img_uncond.c_vector ;
12851290 work_diffusion_model->compute (n_threads,
12861291 diffusion_params,
12871292 &out_img_cond);
1288- img_cond_data = (float *)out_img_cond->data ;
1293+ img_uncond_data = (float *)out_img_cond->data ;
12891294 }
12901295
12911296 int step_count = sigmas.size ();
@@ -1325,15 +1330,15 @@ class StableDiffusionGGML {
13251330 if (has_unconditioned) {
13261331 // out_uncond + cfg_scale * (out_cond - out_uncond)
13271332 if (has_img_uncond) {
1328- // out_uncond + text_cfg_scale * (out_cond - out_img_cond ) + image_cfg_scale * (out_img_cond - out_uncond )
1329- latent_result = negative_data [i] + img_cfg_scale * (img_cond_data [i] - negative_data [i]) + cfg_scale * (positive_data[i] - img_cond_data [i]);
1333+ // out_uncond + text_cfg_scale * (out_cond - out_txt_uncond ) + image_cfg_scale * (out_txt_uncond - out_txtimg_uncond )
1334+ latent_result = img_uncond_data [i] + img_cfg_scale * (negative_data [i] - img_uncond_data [i]) + cfg_scale * (positive_data[i] - negative_data [i]);
13301335 } else {
1331- // img_cfg_scale == cfg_scale
1336+ // img_cfg_scale == 1
13321337 latent_result = negative_data[i] + cfg_scale * (positive_data[i] - negative_data[i]);
13331338 }
13341339 } else if (has_img_uncond) {
1335- // img_cfg_scale == 1
1336- latent_result = img_cond_data [i] + cfg_scale * (positive_data[i] - img_cond_data [i]);
1340+ // img_cfg_scale == cfg_scale
1341+ latent_result = img_uncond_data [i] + cfg_scale * (positive_data[i] - img_uncond_data [i]);
13371342 }
13381343 if (is_skiplayer_step) {
13391344 latent_result = latent_result + slg_scale * (positive_data[i] - skip_layer_data[i]);
0 commit comments