tiny.gpu.KernelArtifact
Defined in contract.
API (20)
Actions
Public operations.
bufferArgumentCountdeinitinitsetBorrowedBytessetBorrowedTextsetBorrowedWordssetExternalPayloadsetOwnedBytessetOwnedTextsetOwnedWords
Fields and members
Public fields and members.
allocatorargument_countbackenddiagnostic_identry_nameformatinterfacepayloadpayload_ownershipscalar_argument_count
Source
Source: lib/gpu/src/contract.zig:1337
zig
pub const KernelArtifact = struct { allocator: Allocator, backend: BackendKind, format: ArtifactFormat, entry_name: []const u8, argument_count: u32, scalar_argument_count: u32 = 0, diagnostic_id: ?[]const u8 = null, /// Requirements and push-constant layout the compiler recorded for this /// entry. Load checks the requirements; launch packs through the layout. interface: choir_abi.Interface = .{}, payload: ArtifactPayload = .none, payload_ownership: PayloadOwnership = .borrowed, pub fn init(allocator: Allocator, desc: KernelArtifactDesc) Allocator.Error!KernelArtifact { const entry_name = try dupeString(allocator, desc.entry_name); errdefer freeString(allocator, entry_name); return .{ .allocator = allocator, .backend = desc.backend, .format = desc.format, .entry_name = entry_name, .argument_count = desc.argument_count, .scalar_argument_count = desc.scalar_argument_count, .diagnostic_id = try dupeOpt(allocator, desc.diagnostic_id), .interface = desc.interface, }; } pub fn bufferArgumentCount(self: *const KernelArtifact) BackendError!u32 { if (self.scalar_argument_count > self.argument_count) return error.InvalidArtifact; return self.argument_count - self.scalar_argument_count; } pub fn deinit(self: *KernelArtifact) void { self.clearPayload(); freeString(self.allocator, self.entry_name); freeOpt(self.allocator, self.diagnostic_id); self.* = undefined; } pub fn setBorrowedBytes(self: *KernelArtifact, bytes: []const u8) void { self.clearPayload(); self.payload = .{ .bytes = bytes }; self.payload_ownership = .borrowed; } pub fn setOwnedBytes(self: *KernelArtifact, bytes: []const u8) BackendError!void { const owned = self.allocator.dupe(u8, bytes) catch return error.OutOfMemory; self.clearPayload(); self.payload = .{ .bytes = owned }; self.payload_ownership = .owned; } pub fn setBorrowedWords(self: *KernelArtifact, words: []const u32) void { self.clearPayload(); self.payload = .{ .words_u32 = words }; self.payload_ownership = .borrowed; } pub fn setOwnedWords(self: *KernelArtifact, words: []const u32) BackendError!void { const owned = self.allocator.dupe(u32, words) catch return error.OutOfMemory; self.clearPayload(); self.payload = .{ .words_u32 = owned }; self.payload_ownership = .owned; } pub fn setBorrowedText(self: *KernelArtifact, text: []const u8) void { self.clearPayload(); self.payload = .{ .text = text }; self.payload_ownership = .borrowed; } pub fn setOwnedText(self: *KernelArtifact, text: []const u8) BackendError!void { const owned = self.allocator.dupe(u8, text) catch return error.OutOfMemory; self.clearPayload(); self.payload = .{ .text = owned }; self.payload_ownership = .owned; } pub fn setExternalPayload(self: *KernelArtifact, payload: ExternalPayload, ownership: PayloadOwnership) BackendError!void { if (ownership == .owned and payload.deinit_fn == null) return error.MissingPayloadDeinit; self.clearPayload(); self.payload = .{ .external = payload }; self.payload_ownership = ownership; } fn clearPayload(self: *KernelArtifact) void { if (self.payload_ownership == .owned) { switch (self.payload) { .bytes => |bytes| freeString(self.allocator, bytes), .words_u32 => |words| self.allocator.free(@constCast(words)), .text => |text| freeString(self.allocator, text), .external => |payload| if (payload.deinit_fn) |deinit_fn| deinit_fn(self.allocator, payload.ptr), .none => {}, } } self.payload = .none; self.payload_ownership = .borrowed; }};Source: lib/gpu/src/root.zig:104
zig
pub const KernelArtifact = contract.KernelArtifact;Complete caller list for KernelArtifact.deinit
8 direct callers.
lib.gpu.src.contract.test_backend_handle_rejects_cross-backend_objects_before_dispatch[function] — test source atlib/gpu/src/contract.zig:4028in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_bufferArgumentCount_subtracts_scalars_and_rejects_inverted_counts[function] — test source atlib/gpu/src/contract.zig:1783in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_kernel_artifacts_represent_cuda_vulkan_metal_and_external_payloads[function] — test source atlib/gpu/src/contract.zig:2756in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_launch_request_makes_buffer_ownership_explicit[function] — test source atlib/gpu/src/contract.zig:3903in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_launch_validates_geometry_before_backend_dispatch[function] — test source atlib/gpu/src/contract.zig:3967in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_loadArtifact_refuses_an_artifact_whose_interface_the_device_cannot_satisfy[function] — test source atlib/gpu/src/contract.zig:4403in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_owned_external_payload_requires_and_runs_destructor[function] — test source atlib/gpu/src/contract.zig:2803in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_runtime_capabilities_gate_stream_and_event_operations_before_dispatch[function] — test source atlib/gpu/src/contract.zig:4292in nearest public ownertiny.gpu.contract
Complete caller list for KernelArtifact.init
8 direct callers.
lib.gpu.src.contract.test_backend_handle_rejects_cross-backend_objects_before_dispatch[function] — test source atlib/gpu/src/contract.zig:4028in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_bufferArgumentCount_subtracts_scalars_and_rejects_inverted_counts[function] — test source atlib/gpu/src/contract.zig:1783in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_kernel_artifacts_represent_cuda_vulkan_metal_and_external_payloads[function] — test source atlib/gpu/src/contract.zig:2756in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_launch_request_makes_buffer_ownership_explicit[function] — test source atlib/gpu/src/contract.zig:3903in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_launch_validates_geometry_before_backend_dispatch[function] — test source atlib/gpu/src/contract.zig:3967in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_loadArtifact_refuses_an_artifact_whose_interface_the_device_cannot_satisfy[function] — test source atlib/gpu/src/contract.zig:4403in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_owned_external_payload_requires_and_runs_destructor[function] — test source atlib/gpu/src/contract.zig:2803in nearest public ownertiny.gpu.contractlib.gpu.src.contract.test_runtime_capabilities_gate_stream_and_event_operations_before_dispatch[function] — test source atlib/gpu/src/contract.zig:4292in nearest public ownertiny.gpu.contract
Audit
| Definitions | 11 |
|---|---|
| Public names | 22 |
| Members | 10 |
| Version | 26.7.0 |
| Revision | daab053ee433 |