lib/accy/src/kernel/library/catalog/artifact/specialized/image.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const std = @import("std");
2
3 const kernel = @import("../../../../root.zig");
4 const entry = @import("../../../root.zig").entry;
5 const image = @import("../../../root.zig").image;
6
7 pub fn create(
8 allocator: std.mem.Allocator,
9 handle: kernel.BackendHandle,
10 metadata: entry.Metadata,
11 options: entry.ArtifactOptions,
12 ) !kernel.OwnedKernelCallArtifact {
13 return switch (metadata.specialization.operation orelse return error.UnknownKernelLibraryEntry) {
14 .image => |image_operation| switch (image_operation) {
15 .blur_pass => createBlurPass(allocator, handle, metadata, options),
16 .resize_bilinear => createResize(allocator, handle, metadata, options),
17 },
18 else => error.UnknownKernelLibraryEntry,
19 };
20 }
21
22 fn createBlurPass(
23 allocator: std.mem.Allocator,
24 handle: kernel.BackendHandle,
25 metadata: entry.Metadata,
26 options: entry.ArtifactOptions,
27 ) !kernel.OwnedKernelCallArtifact {
28 if (metadata.version != image.blur_family_version) return error.UnknownKernelLibraryEntry;
29 const instance = image.blurPassInstanceFromSpecialization(metadata.specialization) orelse {
30 return error.UnknownKernelLibraryEntry;
31 };
32 const target = try image.blurPassFamilyTarget(allocator, instance);
33 defer allocator.free(target);
34 if (!std.mem.eql(u8, metadata.target, target)) return error.UnknownKernelLibraryEntry;
35 return try image.createBlurPassFamilyArtifact(allocator, handle, instance, options);
36 }
37
38 fn createResize(
39 allocator: std.mem.Allocator,
40 handle: kernel.BackendHandle,
41 metadata: entry.Metadata,
42 options: entry.ArtifactOptions,
43 ) !kernel.OwnedKernelCallArtifact {
44 if (metadata.version != image.resize_family_version) return error.UnknownKernelLibraryEntry;
45 const instance = image.resizeInstanceFromSpecialization(metadata.specialization) orelse {
46 return error.UnknownKernelLibraryEntry;
47 };
48 const target = try image.resizeFamilyTarget(allocator, instance);
49 defer allocator.free(target);
50 if (!std.mem.eql(u8, metadata.target, target)) return error.UnknownKernelLibraryEntry;
51 return try image.createResizeFamilyArtifact(allocator, handle, instance, options);
52 }