Skip to content

Commit 20413af

Browse files
committed
bix fix
1 parent ea9159e commit 20413af

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
@@ -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

Comments
 (0)