@@ -787,13 +787,20 @@ class StableDiffusionGGML {
787787 struct ggml_tensor * noised_input = ggml_dup_tensor (work_ctx, noise);
788788
789789 bool has_unconditioned = cfg_scale != 1.0 && uncond.c_crossattn != NULL ;
790+ bool has_skiplayer = slg_scale != 0.0 && skip_layers.size () > 0 ;
791+
790792
791793 // denoise wrapper
792794 struct ggml_tensor * out_cond = ggml_dup_tensor (work_ctx, x);
793795 struct ggml_tensor * out_uncond = NULL ;
796+ struct ggml_tensor * out_skip = NULL ;
797+
794798 if (has_unconditioned) {
795799 out_uncond = ggml_dup_tensor (work_ctx, x);
796800 }
801+ if (has_skiplayer) {
802+ out_skip = ggml_dup_tensor (work_ctx, x);
803+ }
797804 struct ggml_tensor * denoised = ggml_dup_tensor (work_ctx, x);
798805
799806 auto denoise = [&](ggml_tensor* input, float sigma, int step) -> ggml_tensor* {
@@ -875,13 +882,11 @@ class StableDiffusionGGML {
875882 negative_data = (float *)out_uncond->data ;
876883 }
877884
878- bool has_skiplayer = skip_layers.size () > 0 && slg_scale != 0.0 ;
879885 int stepCount = sigmas.size ();
880- has_skiplayer = has_skiplayer && step > (int )(skip_layer_start * stepCount) && step < (int )(skip_layer_end * stepCount);
886+ bool is_skiplayer_step = has_skiplayer && step > (int )(skip_layer_start * stepCount) && step < (int )(skip_layer_end * stepCount);
881887 float * skip_layer_data = NULL ;
882- if (has_skiplayer ) {
888+ if (is_skiplayer_step ) {
883889 LOG_DEBUG (" Skipping layers at step %d\n " , step);
884- ggml_tensor* out_skip = ggml_dup_tensor (work_ctx, x);
885890 // skip layer (same as conditionned)
886891 diffusion_model->compute (n_threads,
887892 noised_input,
@@ -914,7 +919,7 @@ class StableDiffusionGGML {
914919 latent_result = negative_data[i] + cfg_scale * (positive_data[i] - negative_data[i]);
915920 }
916921 }
917- if (has_skiplayer ) {
922+ if (is_skiplayer_step ) {
918923 latent_result = latent_result + (positive_data[i] - skip_layer_data[i]) * slg_scale;
919924 }
920925 // v = latent_result, eps = latent_result
0 commit comments