Files
lemonspace_app/lib/image-pipeline/backend/wasm/wasm-backend.ts

38 lines
965 B
TypeScript

import type {
BackendPipelineRequest,
BackendStepRequest,
ImagePipelineBackend,
} from "@/lib/image-pipeline/backend/backend-types";
import {
loadWasmKernelModule,
type WasmKernelModule,
} from "@/lib/image-pipeline/backend/wasm/wasm-loader";
type WasmBackendOptions = {
loadModule?: () => WasmKernelModule;
};
export function createWasmSimdBackend(options?: WasmBackendOptions): ImagePipelineBackend {
const loadModule = options?.loadModule ?? loadWasmKernelModule;
let kernelModule: WasmKernelModule | null = null;
function ensureModule(): WasmKernelModule {
if (kernelModule) {
return kernelModule;
}
kernelModule = loadModule();
return kernelModule;
}
return {
id: "wasm",
runPreviewStep(request: BackendStepRequest): void {
ensureModule().applyPreviewStep(request);
},
runFullPipeline(request: BackendPipelineRequest): void {
ensureModule().applyFullPipeline(request);
},
};
}