Skip to content

Commit 36f9803

Browse files
committed
bix fix
1 parent e8d57a4 commit 36f9803

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

stable-diffusion.cpp

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

Comments
 (0)