> Development branch documentation · commit 327c05c78d2f528e4f4a679fcc7a77d9aa161f48
> Package versions: @zenfg/webgpu 0.1.0, @zenfg/snapshot 0.1.0, @zenfg/inspector 0.1.0, zenfg 0.1.0, zenfg-snapshot 0.1.0
> Source: https://github.com/uinosoft/zenfg/blob/327c05c78d2f528e4f4a679fcc7a77d9aa161f48/packages/webgpu/src/snapshot.ts#L128

[ZenFG TypeScript API](/zenfg/docs/api/index.md) / [webgpu](/zenfg/docs/api/webgpu/index.md) / [snapshot](/zenfg/docs/api/webgpu/snapshot/index.md) / createFrameGraphSnapshot

# Function: createFrameGraphSnapshot()

> **createFrameGraphSnapshot**(`options`): [`FrameGraphSnapshotV1`](/zenfg/docs/api/snapshot/root/type-aliases/FrameGraphSnapshotV1.md)

Defined in: [packages/webgpu/src/snapshot.ts:128](https://github.com/uinosoft/zenfg/blob/327c05c78d2f528e4f4a679fcc7a77d9aa161f48/packages/webgpu/src/snapshot.ts#L128)

Creates an independent canonical Snapshot 1.2 value from one executed frame.

## Parameters

### options

[`CreateFrameGraphSnapshotOptions`](/zenfg/docs/api/webgpu/snapshot/type-aliases/CreateFrameGraphSnapshotOptions.md)

## Returns

[`FrameGraphSnapshotV1`](/zenfg/docs/api/snapshot/root/type-aliases/FrameGraphSnapshotV1.md)

## Remarks

The conversion preserves retained and culled nodes, normalized
accesses and dependencies, execution segments, allocation planning, GPU
timing availability, and resource-pool counters. The returned object is a
deep JSON clone and does not retain references to the supplied reports.

## Throws

[FrameGraphSnapshotValidationError](/zenfg/docs/api/snapshot/root/classes/FrameGraphSnapshotValidationError.md) if the projected draft does
not satisfy Snapshot 1.2, or if an available timing kind disagrees with its
compilation node. Also throws if a compilation resource contains WebGPU usage
bits that Snapshot 1.2 cannot represent.

## Example

```ts
import { FrameGraph } from '@zenfg/webgpu';
import { createFrameGraphSnapshot } from '@zenfg/webgpu/snapshot';

const graph = new FrameGraph(device);
const recorder = graph.beginFrame();
const scratch = recorder.createBuffer({ size: 256 });
recorder.clearBuffer({
  operations: [{ target: scratch }],
  sideEffect: true,
});
const compiled = recorder.compile({ report: true });
const timing = compiled.executeWithTiming({ frameIndex: 7, timing: 'both' });
const resourcePool = graph.getResourcePoolStats();
const gpuTiming = await timing.gpu;
const snapshot = createFrameGraphSnapshot({
  frameIndex: timing.frameIndex, cpuTiming: timing.cpu,
  compilation: compiled.compilationReport,
  gpuTiming,
  resourcePool,
});
```
