import type { MaterialAsset, MaterialParameter, MaterialPass, MaterialProgramAbi, MaterialProgramAddress, MaterialSurfaceDeclaration, MaterialValue, Result } from '@forgeax/engine-types'; export interface MaterialCookRefs { readonly parent: readonly string[]; readonly textures: readonly string[]; readonly samplers: readonly string[]; readonly modules: readonly string[]; } export interface MaterialCookArtifact { readonly mediaType: string; readonly path: string; readonly digest: string; readonly bytes: Uint8Array; } /** Domain-owned inputs used to compile and select a material program. */ export interface MaterialCookRasterContext { readonly backend: 'webgpu' | 'webgl2' | 'wgpu-native'; readonly capability: 'storage-buffer' | 'storage-buffer-atmosphere' | 'uniform-fallback'; readonly pipeline: 'forward' | 'deferred'; /** Absent is the ordinary material ABI; enabled by the receiving renderer. */ readonly visibleSurface?: true; readonly geometry: 'mesh' | 'skinned' | 'sprite' | 'sprite-instances' | 'terrain'; readonly pass: 'forward' | 'shadow' | 'depth'; readonly profile: 'forgeax-material-wgsl-v1'; readonly toolchain: 'naga-oil'; readonly instrumentation: 'none' | 'validation'; } /** The same authored Surface evaluated at a ray hit or Card capture, without a submission address ABI. */ export interface MaterialCookRayContext { readonly backend: 'webgpu' | 'wgpu-native'; readonly capability: 'storage-buffer'; readonly pipeline: 'ray'; readonly geometry: 'mesh'; readonly pass: 'ray-hit' | 'card-capture'; readonly profile: 'forgeax-material-ray-v1'; readonly toolchain: 'naga-oil'; readonly instrumentation: 'none'; } export type MaterialCookProgramContext = MaterialCookRasterContext | MaterialCookRayContext; /** Programs are derived artifacts, never independently authored assets. */ export interface MaterialCookProgram { readonly specializationKey: string; readonly artifact: MaterialCookArtifact; readonly selections: readonly { readonly pass: string; readonly context: MaterialCookProgramContext; /** Renderer submission address selected by this publication. */ readonly address?: MaterialProgramAddress; /** Actual entry point paired with the selected address. */ readonly entry?: string; /** Producer-reflected ABI facts for the selected artifact/entry. */ readonly abi?: MaterialProgramAbi; }[]; } export interface MaterialCookWasmProvenance { readonly sourceContentKey: string; readonly artifactSha256: string; readonly glueSha256: string; } export interface MaterialCookIdentity { readonly materialContractDigest: string; readonly sourceRevision: string; readonly sourceClosureDigest: string; readonly layoutIdentity: string; readonly programIdentity: string; readonly pipelineIdentity: string; readonly materialPublicationIdentity: string; readonly cookIdentity: string; readonly compilerFingerprint: string; readonly wasm: MaterialCookWasmProvenance; readonly artifactDigest: string; readonly valueGeneration: number; readonly dependencyGeneration: number; readonly cookGeneration: number; } export type MaterialCookIdentityInput = Omit; export interface MaterialCookReceipt { readonly schemaVersion: 'material-cook/4'; readonly sourceClosure: readonly string[]; readonly profile: string; readonly compilerVersion: string; readonly identity: MaterialCookIdentity; readonly derivedInterface: { readonly layoutIdentity: string; /** Build-time Standard physical lowering identity, when the root is Standard. */ readonly layerPlanIdentity?: string; }; } export interface MaterialParameterContract { readonly parameters: readonly MaterialParameter[]; readonly values: Readonly>; } export interface CookedMaterialRecord { readonly schemaVersion: 'material-cook/4'; readonly guid: string; readonly authored?: MaterialAsset; readonly materialGuid?: string; readonly publicationGeneration?: number; readonly specializationKey?: string; readonly programs: readonly MaterialCookProgram[]; /** Digest of the complete program/Pass/context manifest. */ readonly artifactDigest?: string; readonly sourceClosure?: readonly string[]; readonly parameterContract?: MaterialParameterContract; readonly resolved: { readonly passes: readonly MaterialPass[]; readonly parameters: readonly MaterialParameter[]; readonly values: Readonly>; readonly surface?: MaterialSurfaceDeclaration; }; readonly refs: MaterialCookRefs; readonly receipt: MaterialCookReceipt; } export interface MaterialCookRecordError { readonly code: 'material-cook-record-invalid'; readonly expected: string; readonly hint: string; readonly detail: { readonly field: string; readonly actual?: unknown; readonly action: string; }; } export interface MaterialCookIdentityExpectation { readonly layoutIdentity?: string; readonly artifactDigest?: string; readonly inputDigest?: string; } /** Shared ownership predicate for the built-in Standard material root. */ export declare function isStandardRootModule(module: string): boolean; export declare function isStandardMaterialRecord(record: Pick): boolean; /** * Recompute the Standard layer identity from the admitted resolved root. * Material admission and runtime loading share this owner so a stale receipt * cannot select a different physical layer plan after cooking. */ export declare function materialLayerPlanIdentity(record: Pick): string | undefined; export declare function collectMaterialCookRefs(material: Partial): MaterialCookRefs; export declare function createMaterialArtifactDigest(bytes: Uint8Array): string; export declare function createMaterialCookIdentity(input: MaterialCookIdentityInput): MaterialCookIdentity; export declare function serializeCookedMaterialRecord(record: CookedMaterialRecord): string; export declare function serializeMaterialCookReceipt(receipt: MaterialCookReceipt): string; export declare function validateMaterialCookReceipt(value: unknown, expected?: MaterialCookIdentityExpectation): Result; export declare function validateCookedMaterialRecord(value: unknown): Result; export declare function projectCookedMaterialRecord(record: CookedMaterialRecord): Omit; /** Canonical context key shared by publication validation and runtime selection. */ export declare function materialProgramContextKey(context: MaterialCookProgramContext): string; /** One pass-domain projection for both the cooker and runtime selector. */ export declare function materialProgramContextForPass(context: MaterialCookRasterContext, lightMode: string): MaterialCookRasterContext; export declare function validateMaterialCookProgramContext(value: unknown): Result; /** Covers every selection and artifact while excluding transport copies of the bytes. */ export declare function createMaterialProgramSetDigest(programs: readonly MaterialCookProgram[], passes: readonly MaterialPass[]): string; //# sourceMappingURL=material-cook.d.ts.map