Skip to content

Commit af35858

Browse files
committed
bix fix
1 parent e8d57a4 commit af35858

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

stable-diffusion.cpp

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)