lib/gpu/src/runtime/metal/probe.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 const runtime = @import("gpu_metal_runtime");
 3 
 4 export fn gpu_metal_semantic_init() callconv(.c) void {
 5     var storage: [4096]u8 = undefined;
 6     var fixed = std.heap.FixedBufferAllocator.init(&storage);
 7     var owned = runtime.Runtime.init(fixed.allocator()) catch return;
 8     owned.deinit();
 9 }
10 
11 export fn gpu_metal_semantic_load(owner: *runtime.Runtime) callconv(.c) void {
12     var msl = owner.loadMsl(
13         "kernel void semantic_probe() {}",
14         "semantic_probe",
15         0,
16     ) catch return;
17     msl.deinit();
18 
19     var metallib = owner.loadMetallib(
20         &.{ 0xca, 0xfe, 0xba, 0xbe },
21         "semantic_probe",
22         0,
23     ) catch return;
24     metallib.deinit();
25 }
26 
27 export fn gpu_metal_semantic_objects(
28     owner: *runtime.Runtime,
29     kernel: *runtime.LoadedKernel,
30     buffer: *runtime.DeviceBuffer,
31     stream: *runtime.Stream,
32     event: *runtime.Event,
33 ) callconv(.c) void {
34     var bytes = [_]u8{ 1, 2, 3, 4 };
35     buffer.write(&bytes) catch return;
36     buffer.read(&bytes) catch return;
37     event.record(stream) catch return;
38     _ = event.query() catch return;
39     event.synchronize() catch return;
40     stream.synchronize() catch return;
41 
42     const buffers = [_]*runtime.DeviceBuffer{buffer};
43     const scalars = [_]runtime.ScalarArgument{.{ .tag = .u32, .bits = 1 }};
44     const waits = [_]*runtime.Event{event};
45     owner.launch(
46         kernel,
47         &buffers,
48         &scalars,
49         stream,
50         &waits,
51         event,
52         .{ 1, 1, 1 },
53         .{ 1, 1, 1 },
54     ) catch return;
55     owner.synchronize() catch return;
56     _ = owner.defaultStream() catch return;
57 }
58 
59 export fn gpu_metal_semantic_ownership(owner: *runtime.Runtime) callconv(.c) void {
60     var buffer = owner.allocBuffer(64) catch return;
61     buffer.deinit();
62     const stream = owner.createStream() catch return;
63     owner.destroyStream(stream);
64     const event = owner.createEvent() catch return;
65     owner.destroyEvent(event);
66 }