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 }