tiny.sdfii.backend
Defined in tiny.sdfii.
API (22)
Types and contracts
Public types and contracts.
AccyExecutorAccyPathAlphaModeCameraSnapPolicyCapabilitiesCapabilityReportContractCpuRenderGraphDitherModeExecutorErrorExecutorKindOutlineModePaletteQuantizationRenderGraphRenderStyleRetentionRouterUploadPlannerUpscalePolicyZigCpuExecutor
Values and defaults
Public values and defaults.
Source
Source: fun/sdfii/src/engine/backend.zig
zig
const std = @import("std");const sdfii_backend = @import("sdfii_backend");const types = @import("sdfii_ffi").types;pub const Capabilities = sdfii_backend.capabilities;pub const CapabilityReport = sdfii_backend.router.CapabilityReport;pub const Contract = sdfii_backend.contract;pub const ExecutorError = sdfii_backend.ExecutorError;pub const RenderStyle = sdfii_backend.executor.RenderStyle;pub const UpscalePolicy = sdfii_backend.executor.UpscalePolicy;pub const PaletteQuantization = sdfii_backend.executor.PaletteQuantization;pub const DitherMode = sdfii_backend.executor.DitherMode;pub const OutlineMode = sdfii_backend.executor.OutlineMode;pub const CameraSnapPolicy = sdfii_backend.executor.CameraSnapPolicy;pub const AlphaMode = sdfii_backend.executor.AlphaMode;pub const RenderGraph = sdfii_backend.render_graph;pub const Retention = sdfii_backend.retention;pub const CpuRenderGraph = sdfii_backend.cpu_render_graph;pub const AccyPath = sdfii_backend.accy_path;pub const frame_pixel_hit_flag = sdfii_backend.executor.frame_pixel_hit_flag;pub const frame_pixel_outline_flag = sdfii_backend.executor.frame_pixel_outline_flag;pub const UploadPlanner = sdfii_backend.upload;pub const ZigCpuExecutor = sdfii_backend.zig_cpu;pub const AccyExecutor = sdfii_backend.accy.Executor;pub const Router = sdfii_backend.router;pub const ExecutorKind = sdfii_backend.ExecutorKind;test "backend executor contract is surfaced through facade" { const failure = Contract.diagnoseFailure( .render, .accy, error.RenderFailed, .zig_cpu, ); try std.testing.expectEqual(Contract.FailureKind.render_failed, failure.kind); try std.testing.expectEqual(Contract.FallbackPolicy.retry_backend, failure.fallback_policy); try std.testing.expectEqual(ExecutorError, @TypeOf(failure.err)); var router = Router.initWithAllocator(std.testing.allocator); defer router.deinit(); const report = router.capabilityReport(); try std.testing.expect(report.zig_cpu.available); try std.testing.expectEqual(types.BackendKind.accy, AccyPath.selectedBackend()); const live = router.liveAvailability(); try std.testing.expectEqual(@as(u8, 1), live.zig_cpu_available); try std.testing.expectEqual(types.flagFromBool(report.accy.available), live.accy_available);}test "accy backend serves render and field queries when available" { const summary = types.CompiledArtifactSummary{ .compiled_revision = 9, .node_count = 4, .execution_ir_version = 3, .supports_graphics_output = 1, .supports_field_queries = 1, }; const availability = types.BackendAvailability{ .zig_cpu_available = 1, .accy_available = 1, .prefer_accy_before_zig = 1, }; const plan = Router.renderPlan(.{ .summary = summary, .availability = availability, .graphics_requested = 1, }); try std.testing.expectEqual(@backingInt(types.BackendKind.accy), plan.selected_backend); try std.testing.expectEqual(@backingInt(types.RenderRoute.graphics_fast_path), plan.route); const field_query = Router.chooseFieldQueryRoute(.{ .summary = summary, .availability = availability, .backend = plan.selected_backend, }); try std.testing.expectEqual(@backingInt(types.BackendKind.accy), field_query.query_backend); try std.testing.expectEqual(@backingInt(types.FieldQueryRouteReason.native_distance_sampling), field_query.reason); const without_accelerator = Router.chooseFieldQueryRoute(.{ .summary = summary, .availability = .{ .zig_cpu_available = 1 }, .backend = @backingInt(types.BackendKind.zig_cpu), }); try std.testing.expectEqual(@backingInt(types.BackendKind.zig_cpu), without_accelerator.query_backend); try std.testing.expectEqual(@backingInt(types.FieldQueryRouteReason.native_distance_sampling), without_accelerator.reason);}test "backend render graph validates resources and executes in dependency order" { var setup = RenderGraph.Setup.init(std.testing.allocator); defer setup.deinit(); const scene = try setup.declareResource(.{ .name = "scene", .kind = .scene_artifact, .scope = .external, }); const surface = try setup.declareResource(.{ .name = "surface", .kind = .render_artifact, }); const frame = try setup.declareResource(.{ .name = "frame", .kind = .frame_output, .scope = .output, }); const raymarch = try setup.addPass("raymarch"); try setup.reads(raymarch, scene); try setup.writes(raymarch, surface); const submit = try setup.addPass("submit"); try setup.reads(submit, surface); try setup.writes(submit, frame); var graph = try setup.finish(); defer graph.deinit(); try std.testing.expectEqual(raymarch, graph.order[0]); try std.testing.expectEqual(submit, graph.order[1]); try std.testing.expectEqual(raymarch, (try graph.resource(surface)).producer.?); const Recorder = struct { names: [2][]const u8 = .{ "", "" }, count: usize = 0, fn record(context: ?*anyopaque, execution: RenderGraph.PassExecution) !void { const self: *@This() = @ptrCast(@alignCast(context.?)); self.names[self.count] = try execution.name(); self.count += 1; for (execution.accesses) |access| { _ = try execution.resolve(access.resource); } } }; var recorder = Recorder{}; try graph.execute(&recorder, Recorder.record); try std.testing.expectEqualStrings("raymarch", recorder.names[0]); try std.testing.expectEqualStrings("submit", recorder.names[1]); var missing = RenderGraph.Setup.init(std.testing.allocator); defer missing.deinit(); const orphan = try missing.declareResource(.{ .name = "orphan", .kind = .render_artifact }); const reader = try missing.addPass("reader"); try missing.reads(reader, orphan); try std.testing.expectError(error.MissingResourceProducer, missing.finish());}Source: fun/sdfii/src/root.zig:29
zig
pub const backend = engine.backend;Audit
| Definitions | 23 |
|---|---|
| Public names | 23 |
| Members | 0 |
| Version | 26.7.0 |
| Revision | daab053ee433 |