|
@@ -651,7 +651,7 @@ struct vk_device_struct {
|
|
|
vk_pipeline pipeline_add_id_f32;
|
|
vk_pipeline pipeline_add_id_f32;
|
|
|
|
|
|
|
|
vk_pipeline pipeline_concat_f32, pipeline_concat_f16, pipeline_concat_i32;
|
|
vk_pipeline pipeline_concat_f32, pipeline_concat_f16, pipeline_concat_i32;
|
|
|
- vk_pipeline pipeline_upscale_nearest_f32, pipeline_upscale_bilinear_f32, pipeline_upscale_bicubic_f32;
|
|
|
|
|
|
|
+ vk_pipeline pipeline_upscale_nearest_f32, pipeline_upscale_bilinear_f32, pipeline_upscale_bicubic_f32, pipeline_upscale_bilinear_antialias_f32;
|
|
|
vk_pipeline pipeline_scale_f32;
|
|
vk_pipeline pipeline_scale_f32;
|
|
|
vk_pipeline pipeline_sqr_f32;
|
|
vk_pipeline pipeline_sqr_f32;
|
|
|
vk_pipeline pipeline_sqrt_f32;
|
|
vk_pipeline pipeline_sqrt_f32;
|
|
@@ -3956,6 +3956,7 @@ static void ggml_vk_load_shaders(vk_device& device) {
|
|
|
ggml_vk_create_pipeline(device, device->pipeline_upscale_nearest_f32, "upscale_f32", upscale_f32_len, upscale_f32_data, "main", 2, sizeof(vk_op_upscale_push_constants), {512, 1, 1}, {GGML_SCALE_MODE_NEAREST}, 1);
|
|
ggml_vk_create_pipeline(device, device->pipeline_upscale_nearest_f32, "upscale_f32", upscale_f32_len, upscale_f32_data, "main", 2, sizeof(vk_op_upscale_push_constants), {512, 1, 1}, {GGML_SCALE_MODE_NEAREST}, 1);
|
|
|
ggml_vk_create_pipeline(device, device->pipeline_upscale_bilinear_f32, "upscale_f32", upscale_f32_len, upscale_f32_data, "main", 2, sizeof(vk_op_upscale_push_constants), {512, 1, 1}, {GGML_SCALE_MODE_BILINEAR}, 1);
|
|
ggml_vk_create_pipeline(device, device->pipeline_upscale_bilinear_f32, "upscale_f32", upscale_f32_len, upscale_f32_data, "main", 2, sizeof(vk_op_upscale_push_constants), {512, 1, 1}, {GGML_SCALE_MODE_BILINEAR}, 1);
|
|
|
ggml_vk_create_pipeline(device, device->pipeline_upscale_bicubic_f32, "upscale_f32", upscale_f32_len, upscale_f32_data, "main", 2, sizeof(vk_op_upscale_push_constants), {512, 1, 1}, {GGML_SCALE_MODE_BICUBIC}, 1);
|
|
ggml_vk_create_pipeline(device, device->pipeline_upscale_bicubic_f32, "upscale_f32", upscale_f32_len, upscale_f32_data, "main", 2, sizeof(vk_op_upscale_push_constants), {512, 1, 1}, {GGML_SCALE_MODE_BICUBIC}, 1);
|
|
|
|
|
+ ggml_vk_create_pipeline(device, device->pipeline_upscale_bilinear_antialias_f32, "upscale_f32", upscale_f32_len, upscale_f32_data, "main", 2, sizeof(vk_op_upscale_push_constants), {512, 1, 1}, {GGML_SCALE_MODE_BILINEAR | GGML_SCALE_FLAG_ANTIALIAS}, 1);
|
|
|
|
|
|
|
|
ggml_vk_create_pipeline(device, device->pipeline_scale_f32, "scale_f32", scale_f32_len, scale_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
|
|
ggml_vk_create_pipeline(device, device->pipeline_scale_f32, "scale_f32", scale_f32_len, scale_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
|
|
|
|
|
|
|
@@ -8433,7 +8434,7 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const
|
|
|
return nullptr;
|
|
return nullptr;
|
|
|
case GGML_OP_UPSCALE:
|
|
case GGML_OP_UPSCALE:
|
|
|
if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
|
|
if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
|
|
|
- ggml_scale_mode mode = (ggml_scale_mode)(ggml_get_op_params_i32(dst, 0) & 0xFF);
|
|
|
|
|
|
|
+ uint32_t mode = (ggml_get_op_params_i32(dst, 0) & (0xFF | GGML_SCALE_FLAG_ANTIALIAS));
|
|
|
switch (mode) {
|
|
switch (mode) {
|
|
|
case GGML_SCALE_MODE_NEAREST:
|
|
case GGML_SCALE_MODE_NEAREST:
|
|
|
return ctx->device->pipeline_upscale_nearest_f32;
|
|
return ctx->device->pipeline_upscale_nearest_f32;
|
|
@@ -8441,6 +8442,8 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const
|
|
|
return ctx->device->pipeline_upscale_bilinear_f32;
|
|
return ctx->device->pipeline_upscale_bilinear_f32;
|
|
|
case GGML_SCALE_MODE_BICUBIC:
|
|
case GGML_SCALE_MODE_BICUBIC:
|
|
|
return ctx->device->pipeline_upscale_bicubic_f32;
|
|
return ctx->device->pipeline_upscale_bicubic_f32;
|
|
|
|
|
+ case GGML_SCALE_MODE_BILINEAR | GGML_SCALE_FLAG_ANTIALIAS:
|
|
|
|
|
+ return ctx->device->pipeline_upscale_bilinear_antialias_f32;
|
|
|
default:
|
|
default:
|
|
|
return nullptr;
|
|
return nullptr;
|
|
|
}
|
|
}
|
|
@@ -14341,7 +14344,12 @@ static bool ggml_backend_vk_device_supports_op(ggml_backend_dev_t dev, const ggm
|
|
|
}
|
|
}
|
|
|
return true;
|
|
return true;
|
|
|
case GGML_OP_UPSCALE:
|
|
case GGML_OP_UPSCALE:
|
|
|
- return op->src[0]->type == GGML_TYPE_F32 && !(op->op_params[0] & GGML_SCALE_FLAG_ANTIALIAS);
|
|
|
|
|
|
|
+ if (op->op_params[0] & GGML_SCALE_FLAG_ANTIALIAS) {
|
|
|
|
|
+ if ((op->op_params[0] & 0xFF) != GGML_SCALE_MODE_BILINEAR) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return op->src[0]->type == GGML_TYPE_F32;
|
|
|
case GGML_OP_ACC:
|
|
case GGML_OP_ACC:
|
|
|
return op->src[0]->type == GGML_TYPE_F32;
|
|
return op->src[0]->type == GGML_TYPE_F32;
|
|
|
case GGML_OP_CONCAT:
|
|
case GGML_OP_CONCAT:
|