@@ -233,14 +233,17 @@ namespace Flux {
233233 __STATIC_INLINE__ struct ggml_tensor * modulate (struct ggml_context * ctx,
234234 struct ggml_tensor * x,
235235 struct ggml_tensor * shift,
236- struct ggml_tensor * scale) {
236+ struct ggml_tensor * scale,
237+ bool skip_reshape = false ) {
237238 // x: [N, L, C]
238239 // scale: [N, C]
239240 // shift: [N, C]
240- scale = ggml_reshape_3d (ctx, scale, scale->ne [0 ], 1 , scale->ne [1 ]); // [N, 1, C]
241- shift = ggml_reshape_3d (ctx, shift, shift->ne [0 ], 1 , shift->ne [1 ]); // [N, 1, C]
242- x = ggml_add (ctx, x, ggml_mul (ctx, x, scale));
243- x = ggml_add (ctx, x, shift);
241+ if (!skip_reshape) {
242+ scale = ggml_reshape_3d (ctx, scale, scale->ne [0 ], 1 , scale->ne [1 ]); // [N, 1, C]
243+ shift = ggml_reshape_3d (ctx, shift, shift->ne [0 ], 1 , shift->ne [1 ]); // [N, 1, C]
244+ }
245+ x = ggml_add (ctx, x, ggml_mul (ctx, x, scale));
246+ x = ggml_add (ctx, x, shift);
244247 return x;
245248 }
246249
@@ -860,14 +863,14 @@ namespace Flux {
860863 }
861864 }
862865
863- struct ggml_tensor * pad_to_patch_size (struct ggml_context * ctx,
866+ struct ggml_tensor * pad_to_patch_size (GGMLRunnerContext * ctx,
864867 struct ggml_tensor * x) {
865868 int64_t W = x->ne [0 ];
866869 int64_t H = x->ne [1 ];
867870
868871 int pad_h = (params.patch_size - H % params.patch_size ) % params.patch_size ;
869872 int pad_w = (params.patch_size - W % params.patch_size ) % params.patch_size ;
870- x = ggml_pad (ctx, x, pad_w, pad_h, 0 , 0 ); // [N, C, H + pad_h, W + pad_w]
873+ x = ggml_ext_pad (ctx-> ggml_ctx , x, pad_w, pad_h, 0 , 0 , ctx-> circular_x_enabled , ctx-> circular_y_enabled );
871874 return x;
872875 }
873876
@@ -893,11 +896,11 @@ namespace Flux {
893896 return x;
894897 }
895898
896- struct ggml_tensor * process_img (struct ggml_context * ctx,
899+ struct ggml_tensor * process_img (GGMLRunnerContext * ctx,
897900 struct ggml_tensor * x) {
898901 // img = rearrange(x, "b c (h ph) (w pw) -> b (h w) (c ph pw)", ph=patch_size, pw=patch_size)
899902 x = pad_to_patch_size (ctx, x);
900- x = patchify (ctx, x);
903+ x = patchify (ctx-> ggml_ctx , x);
901904 return x;
902905 }
903906
@@ -1076,7 +1079,7 @@ namespace Flux {
10761079 int pad_h = (patch_size - H % patch_size) % patch_size;
10771080 int pad_w = (patch_size - W % patch_size) % patch_size;
10781081
1079- auto img = pad_to_patch_size (ctx-> ggml_ctx , x);
1082+ auto img = pad_to_patch_size (ctx, x);
10801083 auto orig_img = img;
10811084
10821085 if (params.chroma_radiance_params .use_patch_size_32 ) {
@@ -1150,16 +1153,16 @@ namespace Flux {
11501153 int pad_h = (patch_size - H % patch_size) % patch_size;
11511154 int pad_w = (patch_size - W % patch_size) % patch_size;
11521155
1153- auto img = process_img (ctx-> ggml_ctx , x);
1156+ auto img = process_img (ctx, x);
11541157 uint64_t img_tokens = img->ne [1 ];
11551158
11561159 if (params.version == VERSION_FLUX_FILL ) {
11571160 GGML_ASSERT (c_concat != nullptr );
11581161 ggml_tensor* masked = ggml_view_4d (ctx->ggml_ctx , c_concat, c_concat->ne [0 ], c_concat->ne [1 ], C, 1 , c_concat->nb [1 ], c_concat->nb [2 ], c_concat->nb [3 ], 0 );
11591162 ggml_tensor* mask = ggml_view_4d (ctx->ggml_ctx , c_concat, c_concat->ne [0 ], c_concat->ne [1 ], 8 * 8 , 1 , c_concat->nb [1 ], c_concat->nb [2 ], c_concat->nb [3 ], c_concat->nb [2 ] * C);
11601163
1161- masked = process_img (ctx-> ggml_ctx , masked);
1162- mask = process_img (ctx-> ggml_ctx , mask);
1164+ masked = process_img (ctx, masked);
1165+ mask = process_img (ctx, mask);
11631166
11641167 img = ggml_concat (ctx->ggml_ctx , img, ggml_concat (ctx->ggml_ctx , masked, mask, 0 ), 0 );
11651168 } else if (params.version == VERSION_FLEX_2 ) {
@@ -1168,21 +1171,21 @@ namespace Flux {
11681171 ggml_tensor* mask = ggml_view_4d (ctx->ggml_ctx , c_concat, c_concat->ne [0 ], c_concat->ne [1 ], 1 , 1 , c_concat->nb [1 ], c_concat->nb [2 ], c_concat->nb [3 ], c_concat->nb [2 ] * C);
11691172 ggml_tensor* control = ggml_view_4d (ctx->ggml_ctx , c_concat, c_concat->ne [0 ], c_concat->ne [1 ], C, 1 , c_concat->nb [1 ], c_concat->nb [2 ], c_concat->nb [3 ], c_concat->nb [2 ] * (C + 1 ));
11701173
1171- masked = process_img (ctx-> ggml_ctx , masked);
1172- mask = process_img (ctx-> ggml_ctx , mask);
1173- control = process_img (ctx-> ggml_ctx , control);
1174+ masked = process_img (ctx, masked);
1175+ mask = process_img (ctx, mask);
1176+ control = process_img (ctx, control);
11741177
11751178 img = ggml_concat (ctx->ggml_ctx , img, ggml_concat (ctx->ggml_ctx , ggml_concat (ctx->ggml_ctx , masked, mask, 0 ), control, 0 ), 0 );
11761179 } else if (params.version == VERSION_FLUX_CONTROLS ) {
11771180 GGML_ASSERT (c_concat != nullptr );
11781181
1179- auto control = process_img (ctx-> ggml_ctx , c_concat);
1182+ auto control = process_img (ctx, c_concat);
11801183 img = ggml_concat (ctx->ggml_ctx , img, control, 0 );
11811184 }
11821185
11831186 if (ref_latents.size () > 0 ) {
11841187 for (ggml_tensor* ref : ref_latents) {
1185- ref = process_img (ctx-> ggml_ctx , ref);
1188+ ref = process_img (ctx, ref);
11861189 img = ggml_concat (ctx->ggml_ctx , img, ref, 1 );
11871190 }
11881191 }
@@ -1472,6 +1475,8 @@ namespace Flux {
14721475 increase_ref_index,
14731476 flux_params.ref_index_scale ,
14741477 flux_params.theta ,
1478+ circular_y_enabled,
1479+ circular_x_enabled,
14751480 flux_params.axes_dim );
14761481 int pos_len = pe_vec.size () / flux_params.axes_dim_sum / 2 ;
14771482 // LOG_DEBUG("pos_len %d", pos_len);
0 commit comments