UNPKG

@motion-core/motion-gpu

Version:

Framework-agnostic WebGPU runtime for fullscreen WGSL shaders with explicit Svelte, React, and Vue adapter entrypoints.

36 lines (35 loc) 2.3 kB
import { createMotionGPUError } from "./error-report.js"; import { builtInRenderPassBrand, managedPassBrand } from "./pass-brand.js"; //#region src/lib/core/pass-contract.ts function isRecord(value) { return typeof value === "object" && value !== null || typeof value === "function"; } /** Reports whether a value is a renderer-managed compute pass. */ function isManagedComputePass(value) { return isRecord(value) && value[managedPassBrand] === "compute" && value.isCompute === true; } /** Reports whether a value is a renderer-managed fragment-feedback pass. */ function isManagedFeedbackPass(value) { return isRecord(value) && value[managedPassBrand] === "feedback" && value.isPingPongShader === true; } /** Reports whether a render pass is a MotionGPU built-in with a known format contract. */ function isBuiltInRenderPass(value) { if (!isRecord(value)) return false; const contract = value[builtInRenderPassBrand]; return isRecord(contract) && typeof contract.passName === "string" && contract.input === "float-sampled" && contract.output === "float-renderable"; } /** * Validates the public JavaScript boundary before a pass enters graph planning. * Compute and feedback passes are nominal; custom render passes remain structural. */ function assertMotionGPUPass(value) { if (isManagedComputePass(value) || isManagedFeedbackPass(value)) return; if (!isRecord(value)) throw createMotionGPUError("RENDER_GRAPH_INVALID", "A render graph pass must be an object."); if (value.isCompute === true) throw createMotionGPUError("RENDER_GRAPH_INVALID", "Objects with isCompute: true are not custom compute passes. Use ComputePass or PingPongComputePass."); if (value.isPingPongShader === true) throw createMotionGPUError("RENDER_GRAPH_INVALID", "Objects with isPingPongShader: true are not custom feedback passes. Use PingPongShaderPass."); if (value[managedPassBrand] !== void 0) throw createMotionGPUError("RENDER_GRAPH_INVALID", "MotionGPU-managed pass has an invalid internal contract."); if (typeof value.render !== "function") throw createMotionGPUError("RENDER_GRAPH_INVALID", "A custom RenderPass must provide render(context)."); } //#endregion export { assertMotionGPUPass, isBuiltInRenderPass, isManagedComputePass, isManagedFeedbackPass }; //# sourceMappingURL=pass-contract.js.map