@@ -1160,17 +1160,23 @@ class StableDiffusionGGML {
11601160
11611161 struct ggml_tensor * noised_input = ggml_dup_tensor (work_ctx, x);
11621162
1163+ bool has_skiplayer = slg_scale != 0.0 && skip_layers.size () > 0 ;
11631164 bool has_skiplayer = slg_scale != 0.0 && skip_layers.size () > 0 ;
11641165 bool has_conditionned = (has_skiplayer || cfg_scale != 0.0 ) && cond.c_crossattn != nullptr ;
11651166 bool has_unconditioned = cfg_scale != img_cfg_scale && uncond.c_crossattn != nullptr ;
11661167 bool has_img_uncond = img_cfg_scale != 1.0 && img_uncond.c_crossattn != nullptr ;
11671168
1169+ GGML_ASSERT (has_conditionned || has_unconditioned || has_img_uncond);
1170+
11681171 // denoise wrapper
1169- struct ggml_tensor * out_cond = ggml_dup_tensor (work_ctx, x) ;
1172+ struct ggml_tensor * out_cond = nullptr ;
11701173 struct ggml_tensor * out_uncond = nullptr ;
11711174 struct ggml_tensor * out_skip = nullptr ;
11721175 struct ggml_tensor * out_img_cond = nullptr ;
11731176
1177+ if (has_conditionned) {
1178+ out_cond = ggml_dup_tensor (work_ctx, x);
1179+ }
11741180 if (has_unconditioned) {
11751181 out_uncond = ggml_dup_tensor (work_ctx, x);
11761182 }
@@ -1281,15 +1287,15 @@ class StableDiffusionGGML {
12811287 negative_data = (float *)out_uncond->data ;
12821288 }
12831289
1284- float * img_cond_data = nullptr ;
1290+ float * img_uncond_data = nullptr ;
12851291 if (has_img_uncond) {
12861292 diffusion_params.context = img_uncond.c_crossattn ;
12871293 diffusion_params.c_concat = img_uncond.c_concat ;
12881294 diffusion_params.y = img_uncond.c_vector ;
12891295 work_diffusion_model->compute (n_threads,
12901296 diffusion_params,
12911297 &out_img_cond);
1292- img_cond_data = (float *)out_img_cond->data ;
1298+ img_uncond_data = (float *)out_img_cond->data ;
12931299 }
12941300
12951301 int step_count = sigmas.size ();
@@ -1329,15 +1335,15 @@ class StableDiffusionGGML {
13291335 if (has_unconditioned) {
13301336 // out_uncond + cfg_scale * (out_cond - out_uncond)
13311337 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]);
1338+ // out_uncond + text_cfg_scale * (out_cond - out_txt_uncond ) + image_cfg_scale * (out_txt_uncond - out_txtimg_uncond )
1339+ latent_result = img_uncond_data [i] + img_cfg_scale * (negative_data [i] - img_uncond_data [i]) + cfg_scale * (positive_data[i] - negative_data [i]);
13341340 } else {
1335- // img_cfg_scale == cfg_scale
1341+ // img_cfg_scale == 1
13361342 latent_result = negative_data[i] + cfg_scale * (positive_data[i] - negative_data[i]);
13371343 }
13381344 } 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]);
1345+ // img_cfg_scale == cfg_scale
1346+ latent_result = img_uncond_data [i] + cfg_scale * (positive_data[i] - img_uncond_data [i]);
13411347 }
13421348 if (is_skiplayer_step) {
13431349 latent_result = latent_result + slg_scale * (positive_data[i] - skip_layer_data[i]);
0 commit comments