@@ -530,8 +530,8 @@ struct vk_device_struct {
530
530
vk_pipeline pipeline_opt_step_sgd_f32;
531
531
vk_pipeline pipeline_conv2d_f32[CONV_SHAPE_COUNT];
532
532
vk_pipeline pipeline_conv2d_f16_f32[CONV_SHAPE_COUNT];
533
- vk_pipeline pipeline_conv2d_dw_whcn_f32;
534
- vk_pipeline pipeline_conv2d_dw_cwhn_f32;
533
+ vk_pipeline pipeline_conv2d_dw_whcn_f32, pipeline_conv2d_dw_whcn_f16_f32 ;
534
+ vk_pipeline pipeline_conv2d_dw_cwhn_f32, pipeline_conv2d_dw_cwhn_f16_f32 ;
535
535
536
536
// [2][2][2] is for {f16acc,f32acc}x{large,small_rows}x{unaligned, aligned}
537
537
vk_pipeline pipeline_flash_attn_f32_f16_cm2[GGML_TYPE_COUNT][FA_HEAD_SIZE_COUNT][2][2][2];
@@ -3257,6 +3257,8 @@ static void ggml_vk_load_shaders(vk_device& device) {
3257
3257
3258
3258
ggml_vk_create_pipeline(device, device->pipeline_conv2d_dw_whcn_f32, "conv2d_dw_whcn_f32", conv2d_dw_whcn_f32_len, conv2d_dw_whcn_f32_data, "main", 3, sizeof(vk_op_conv2d_dw_push_constants), {512, 1, 1}, {}, 1);
3259
3259
ggml_vk_create_pipeline(device, device->pipeline_conv2d_dw_cwhn_f32, "conv2d_dw_cwhn_f32", conv2d_dw_cwhn_f32_len, conv2d_dw_cwhn_f32_data, "main", 3, sizeof(vk_op_conv2d_dw_push_constants), {512, 1, 1}, {}, 1);
3260
+ ggml_vk_create_pipeline(device, device->pipeline_conv2d_dw_whcn_f16_f32, "conv2d_dw_whcn_f16_f32", conv2d_dw_whcn_f16_f32_len, conv2d_dw_whcn_f16_f32_data, "main", 3, sizeof(vk_op_conv2d_dw_push_constants), {512, 1, 1}, {}, 1);
3261
+ ggml_vk_create_pipeline(device, device->pipeline_conv2d_dw_cwhn_f16_f32, "conv2d_dw_cwhn_f16_f32", conv2d_dw_cwhn_f16_f32_len, conv2d_dw_cwhn_f16_f32_data, "main", 3, sizeof(vk_op_conv2d_dw_push_constants), {512, 1, 1}, {}, 1);
3260
3262
3261
3263
for (auto &c : compiles) {
3262
3264
c.wait();
@@ -7346,6 +7348,12 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const
7346
7348
} else if (ggml_is_contiguous_channels(src1)) {
7347
7349
return ctx->device->pipeline_conv2d_dw_cwhn_f32;
7348
7350
}
7351
+ } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) {
7352
+ if (ggml_is_contiguous(src1)) {
7353
+ return ctx->device->pipeline_conv2d_dw_whcn_f16_f32;
7354
+ } else if (ggml_is_contiguous_channels(src1)) {
7355
+ return ctx->device->pipeline_conv2d_dw_cwhn_f16_f32;
7356
+ }
7349
7357
}
7350
7358
return nullptr;
7351
7359
default:
0 commit comments