@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
JavaScript
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