@plasius/gpu-renderer 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +23 -0
- package/dist/index.cjs +192 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +188 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.d.ts +96 -0
- package/src/index.js +218 -0
package/CHANGELOG.md
CHANGED
|
@@ -23,6 +23,27 @@ All notable changes to this project will be documented in this file.
|
|
|
23
23
|
- **Security**
|
|
24
24
|
- (placeholder)
|
|
25
25
|
|
|
26
|
+
## [0.1.8] - 2026-03-15
|
|
27
|
+
|
|
28
|
+
- **Added**
|
|
29
|
+
- ADR, TDR, and test-first planning coverage for the ray-tracing-first
|
|
30
|
+
hybrid render graph and range-banded scene representations.
|
|
31
|
+
- Added `createRayTracingRenderPlan(...)` plus public render-stage,
|
|
32
|
+
representation-band, and acceleration-structure policy exports.
|
|
33
|
+
- Expanded renderer worker manifests with stable visual snapshot input
|
|
34
|
+
boundaries and RT-first render-planning metadata.
|
|
35
|
+
- Added tests covering stable snapshot ingestion, required denoise/temporal
|
|
36
|
+
stages, representation-band policies, and acceleration-structure classes.
|
|
37
|
+
|
|
38
|
+
- **Changed**
|
|
39
|
+
- TDR-0003 now reflects the implemented RT-first render-planning helpers.
|
|
40
|
+
|
|
41
|
+
- **Fixed**
|
|
42
|
+
- (placeholder)
|
|
43
|
+
|
|
44
|
+
- **Security**
|
|
45
|
+
- (placeholder)
|
|
46
|
+
|
|
26
47
|
## [0.1.7] - 2026-03-14
|
|
27
48
|
|
|
28
49
|
- **Added**
|
|
@@ -112,3 +133,4 @@ All notable changes to this project will be documented in this file.
|
|
|
112
133
|
[0.1.2]: https://github.com/Plasius-LTD/gpu-renderer/releases/tag/v0.1.2
|
|
113
134
|
[0.1.6]: https://github.com/Plasius-LTD/gpu-renderer/releases/tag/v0.1.6
|
|
114
135
|
[0.1.7]: https://github.com/Plasius-LTD/gpu-renderer/releases/tag/v0.1.7
|
|
136
|
+
[0.1.8]: https://github.com/Plasius-LTD/gpu-renderer/releases/tag/v0.1.8
|
package/README.md
CHANGED
|
@@ -81,6 +81,28 @@ console.log(xrManifest.jobs.find((job) => job.key === "lateLatch"));
|
|
|
81
81
|
- Jobs include queue class, priority, dependencies, adaptive budget levels, and
|
|
82
82
|
debug metadata such as allocation tags.
|
|
83
83
|
|
|
84
|
+
## Ray-Tracing-First Planning
|
|
85
|
+
|
|
86
|
+
The renderer now publishes a stable-snapshot render plan for the premium
|
|
87
|
+
ray-tracing-first frame model.
|
|
88
|
+
|
|
89
|
+
```js
|
|
90
|
+
import { createRayTracingRenderPlan } from "@plasius/gpu-renderer";
|
|
91
|
+
|
|
92
|
+
const plan = createRayTracingRenderPlan({
|
|
93
|
+
snapshotId: "visual-snapshot-42",
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
console.log(plan.inputBoundary);
|
|
97
|
+
console.log(plan.renderStages.map((stage) => stage.key));
|
|
98
|
+
console.log(plan.representationBands);
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The plan makes the stable visual snapshot boundary explicit, publishes the
|
|
102
|
+
required RT-first stage ordering, and exposes representation-band plus
|
|
103
|
+
acceleration-structure update policy metadata for downstream lighting and
|
|
104
|
+
performance packages.
|
|
105
|
+
|
|
84
106
|
## XR integration
|
|
85
107
|
|
|
86
108
|
```js
|
|
@@ -103,6 +125,7 @@ renderer.bindXrManager(xr, {
|
|
|
103
125
|
- `createRendererDebugHooks(options)`
|
|
104
126
|
- `getRendererWorkerProfile(name?)`
|
|
105
127
|
- `getRendererWorkerManifest(name?)`
|
|
128
|
+
- `createRayTracingRenderPlan(options)`
|
|
106
129
|
- `bindRendererToXrManager(renderer, xrManager, options)`
|
|
107
130
|
- `defaultRendererClearColor`
|
|
108
131
|
- `rendererDebugOwner`
|
package/dist/index.cjs
CHANGED
|
@@ -21,12 +21,16 @@ var index_exports = {};
|
|
|
21
21
|
__export(index_exports, {
|
|
22
22
|
bindRendererToXrManager: () => bindRendererToXrManager,
|
|
23
23
|
createGpuRenderer: () => createGpuRenderer,
|
|
24
|
+
createRayTracingRenderPlan: () => createRayTracingRenderPlan,
|
|
24
25
|
createRendererDebugHooks: () => createRendererDebugHooks,
|
|
25
26
|
defaultRendererClearColor: () => defaultRendererClearColor,
|
|
26
27
|
defaultRendererWorkerProfile: () => defaultRendererWorkerProfile,
|
|
27
28
|
getRendererWorkerManifest: () => getRendererWorkerManifest,
|
|
28
29
|
getRendererWorkerProfile: () => getRendererWorkerProfile,
|
|
30
|
+
rendererAccelerationStructureUpdateClasses: () => rendererAccelerationStructureUpdateClasses,
|
|
29
31
|
rendererDebugOwner: () => rendererDebugOwner,
|
|
32
|
+
rendererRayTracingStageOrder: () => rendererRayTracingStageOrder,
|
|
33
|
+
rendererRepresentationBands: () => rendererRepresentationBands,
|
|
30
34
|
rendererWorkerManifests: () => rendererWorkerManifests,
|
|
31
35
|
rendererWorkerProfileNames: () => rendererWorkerProfileNames,
|
|
32
36
|
rendererWorkerProfiles: () => rendererWorkerProfiles,
|
|
@@ -39,6 +43,98 @@ var DEFAULT_CANVAS_SELECTOR = "canvas[data-plasius-gpu-renderer]";
|
|
|
39
43
|
var rendererDebugOwner = "renderer";
|
|
40
44
|
var rendererWorkerQueueClass = "render";
|
|
41
45
|
var defaultRendererWorkerProfile = "realtime";
|
|
46
|
+
var rendererRepresentationBands = Object.freeze([
|
|
47
|
+
"near",
|
|
48
|
+
"mid",
|
|
49
|
+
"far",
|
|
50
|
+
"horizon"
|
|
51
|
+
]);
|
|
52
|
+
var rendererAccelerationStructureUpdateClasses = Object.freeze([
|
|
53
|
+
"static",
|
|
54
|
+
"rigid-dynamic",
|
|
55
|
+
"deforming",
|
|
56
|
+
"proxy"
|
|
57
|
+
]);
|
|
58
|
+
var rendererRayTracingStageOrder = Object.freeze([
|
|
59
|
+
"primaryVisibility",
|
|
60
|
+
"shadowAssist",
|
|
61
|
+
"opaqueFoundation",
|
|
62
|
+
"rtDirectLighting",
|
|
63
|
+
"rtReflections",
|
|
64
|
+
"rtGlobalIllumination",
|
|
65
|
+
"denoiseTemporal",
|
|
66
|
+
"transparents",
|
|
67
|
+
"composition",
|
|
68
|
+
"present"
|
|
69
|
+
]);
|
|
70
|
+
var rendererRayTracingStageDefinitions = Object.freeze(
|
|
71
|
+
rendererRayTracingStageOrder.map(
|
|
72
|
+
(key, index) => Object.freeze({
|
|
73
|
+
key,
|
|
74
|
+
order: index + 1,
|
|
75
|
+
required: true,
|
|
76
|
+
description: {
|
|
77
|
+
primaryVisibility: "Primary visibility and depth preparation.",
|
|
78
|
+
shadowAssist: "Shadow assist passes and regional shadow preparation.",
|
|
79
|
+
opaqueFoundation: "Main opaque foundation for shading and tracing inputs.",
|
|
80
|
+
rtDirectLighting: "Ray-traced direct lighting and premium shadows.",
|
|
81
|
+
rtReflections: "Ray-traced reflections for important surfaces.",
|
|
82
|
+
rtGlobalIllumination: "Selective ray-traced indirect lighting and GI.",
|
|
83
|
+
denoiseTemporal: "Required denoise and temporal accumulation stage.",
|
|
84
|
+
transparents: "Transparents, particles, and volumetrics composition.",
|
|
85
|
+
composition: "Final world composition and color resolve.",
|
|
86
|
+
present: "Presentation to the active surface."
|
|
87
|
+
}[key]
|
|
88
|
+
})
|
|
89
|
+
)
|
|
90
|
+
);
|
|
91
|
+
var rendererRepresentationBandPolicies = Object.freeze({
|
|
92
|
+
near: Object.freeze({
|
|
93
|
+
band: "near",
|
|
94
|
+
rasterMode: "full-live",
|
|
95
|
+
rtParticipation: "premium",
|
|
96
|
+
shadowSource: "ray-traced-primary",
|
|
97
|
+
temporalReuse: "balanced",
|
|
98
|
+
updateCadenceDivisor: 1
|
|
99
|
+
}),
|
|
100
|
+
mid: Object.freeze({
|
|
101
|
+
band: "mid",
|
|
102
|
+
rasterMode: "simplified-live",
|
|
103
|
+
rtParticipation: "selective",
|
|
104
|
+
shadowSource: "regional-raster-and-proxy",
|
|
105
|
+
temporalReuse: "aggressive",
|
|
106
|
+
updateCadenceDivisor: 2
|
|
107
|
+
}),
|
|
108
|
+
far: Object.freeze({
|
|
109
|
+
band: "far",
|
|
110
|
+
rasterMode: "proxy-or-cached",
|
|
111
|
+
rtParticipation: "proxy",
|
|
112
|
+
shadowSource: "merged-proxy-casters",
|
|
113
|
+
temporalReuse: "high",
|
|
114
|
+
updateCadenceDivisor: 8
|
|
115
|
+
}),
|
|
116
|
+
horizon: Object.freeze({
|
|
117
|
+
band: "horizon",
|
|
118
|
+
rasterMode: "horizon-shell",
|
|
119
|
+
rtParticipation: "disabled",
|
|
120
|
+
shadowSource: "baked-impression",
|
|
121
|
+
temporalReuse: "cached",
|
|
122
|
+
updateCadenceDivisor: 60
|
|
123
|
+
})
|
|
124
|
+
});
|
|
125
|
+
var rendererAccelerationStructurePolicies = Object.freeze(
|
|
126
|
+
rendererAccelerationStructureUpdateClasses.map(
|
|
127
|
+
(updateClass) => Object.freeze({
|
|
128
|
+
updateClass,
|
|
129
|
+
description: {
|
|
130
|
+
static: "Stable static world geometry with infrequent rebuilds.",
|
|
131
|
+
"rigid-dynamic": "Rigid transforms that can be refit or relinked without full deformation updates.",
|
|
132
|
+
deforming: "Skinned or vertex-deforming content treated as a managed RT cost center.",
|
|
133
|
+
proxy: "Low-cost RT proxy or distant representation updates."
|
|
134
|
+
}[updateClass]
|
|
135
|
+
})
|
|
136
|
+
)
|
|
137
|
+
);
|
|
42
138
|
function buildRendererWorkerBudgetLevels(jobType, queueClass, levels) {
|
|
43
139
|
return Object.freeze(
|
|
44
140
|
levels.map(
|
|
@@ -393,6 +489,53 @@ var rendererWorkerProfileSpecs = {
|
|
|
393
489
|
}
|
|
394
490
|
}
|
|
395
491
|
};
|
|
492
|
+
function buildRendererInputBoundary(profile) {
|
|
493
|
+
return Object.freeze({
|
|
494
|
+
type: "stable-visual-snapshot",
|
|
495
|
+
owner: rendererDebugOwner,
|
|
496
|
+
profile,
|
|
497
|
+
authority: "visual",
|
|
498
|
+
source: "scene-preparation",
|
|
499
|
+
stable: true
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
function buildRendererRenderStages(profile) {
|
|
503
|
+
return Object.freeze(
|
|
504
|
+
rendererRayTracingStageDefinitions.map(
|
|
505
|
+
(stage) => Object.freeze({
|
|
506
|
+
...stage,
|
|
507
|
+
profile,
|
|
508
|
+
workerJobKeys: profile === "xr" && stage.key === "primaryVisibility" ? Object.freeze(["lateLatch", "visibility"]) : stage.key === "present" ? Object.freeze(["submit"]) : stage.key === "denoiseTemporal" || stage.key === "transparents" || stage.key === "composition" ? Object.freeze(["postProcess"]) : stage.key === "primaryVisibility" ? Object.freeze(["visibility"]) : stage.key === "shadowAssist" || stage.key === "opaqueFoundation" || stage.key === "rtDirectLighting" || stage.key === "rtReflections" || stage.key === "rtGlobalIllumination" ? Object.freeze(["mainEncode"]) : Object.freeze(["mainEncode"])
|
|
509
|
+
})
|
|
510
|
+
)
|
|
511
|
+
);
|
|
512
|
+
}
|
|
513
|
+
function buildRendererRepresentationBands(profile) {
|
|
514
|
+
return Object.freeze(
|
|
515
|
+
rendererRepresentationBands.map(
|
|
516
|
+
(band) => Object.freeze({
|
|
517
|
+
...rendererRepresentationBandPolicies[band],
|
|
518
|
+
profile
|
|
519
|
+
})
|
|
520
|
+
)
|
|
521
|
+
);
|
|
522
|
+
}
|
|
523
|
+
function buildRendererAccelerationStructureUpdates(profile) {
|
|
524
|
+
return Object.freeze(
|
|
525
|
+
rendererAccelerationStructurePolicies.map(
|
|
526
|
+
(policy) => Object.freeze({
|
|
527
|
+
...policy,
|
|
528
|
+
profile
|
|
529
|
+
})
|
|
530
|
+
)
|
|
531
|
+
);
|
|
532
|
+
}
|
|
533
|
+
function assertRendererIdentifier(name, value) {
|
|
534
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
535
|
+
throw new Error(`${name} must be a non-empty string.`);
|
|
536
|
+
}
|
|
537
|
+
return value.trim();
|
|
538
|
+
}
|
|
396
539
|
function buildRendererWorkerProfile(name, spec) {
|
|
397
540
|
return Object.freeze({
|
|
398
541
|
name,
|
|
@@ -444,6 +587,10 @@ function buildRendererWorkerManifest(name, spec) {
|
|
|
444
587
|
description: spec.description,
|
|
445
588
|
queueClass: rendererWorkerQueueClass,
|
|
446
589
|
schedulerMode: "dag",
|
|
590
|
+
inputBoundary: buildRendererInputBoundary(name),
|
|
591
|
+
renderStages: buildRendererRenderStages(name),
|
|
592
|
+
representationBands: buildRendererRepresentationBands(name),
|
|
593
|
+
accelerationStructureUpdates: buildRendererAccelerationStructureUpdates(name),
|
|
447
594
|
suggestedAllocationIds: Object.freeze([...spec.suggestedAllocationIds]),
|
|
448
595
|
jobs: Object.freeze(
|
|
449
596
|
Object.entries(spec.jobs).map(
|
|
@@ -487,6 +634,47 @@ function getRendererWorkerManifest(name = defaultRendererWorkerProfile) {
|
|
|
487
634
|
}
|
|
488
635
|
return manifest;
|
|
489
636
|
}
|
|
637
|
+
function createRayTracingRenderPlan(options = {}) {
|
|
638
|
+
const profile = options.profile ?? defaultRendererWorkerProfile;
|
|
639
|
+
const snapshotId = assertRendererIdentifier(
|
|
640
|
+
"snapshotId",
|
|
641
|
+
options.snapshotId
|
|
642
|
+
);
|
|
643
|
+
const workerManifest = getRendererWorkerManifest(profile);
|
|
644
|
+
const representations = Array.isArray(options.representations) ? Object.freeze(
|
|
645
|
+
options.representations.map((representation, index) => {
|
|
646
|
+
if (!representation || typeof representation !== "object") {
|
|
647
|
+
throw new Error(`representations[${index}] must be an object.`);
|
|
648
|
+
}
|
|
649
|
+
const band = assertRendererIdentifier(
|
|
650
|
+
`representations[${index}].band`,
|
|
651
|
+
representation.band
|
|
652
|
+
);
|
|
653
|
+
if (!rendererRepresentationBands.includes(band)) {
|
|
654
|
+
throw new Error(
|
|
655
|
+
`representations[${index}].band must be one of: ${rendererRepresentationBands.join(", ")}.`
|
|
656
|
+
);
|
|
657
|
+
}
|
|
658
|
+
return Object.freeze({
|
|
659
|
+
...representation,
|
|
660
|
+
band
|
|
661
|
+
});
|
|
662
|
+
})
|
|
663
|
+
) : workerManifest.representationBands;
|
|
664
|
+
return Object.freeze({
|
|
665
|
+
schemaVersion: 1,
|
|
666
|
+
owner: rendererDebugOwner,
|
|
667
|
+
profile,
|
|
668
|
+
inputBoundary: Object.freeze({
|
|
669
|
+
...workerManifest.inputBoundary,
|
|
670
|
+
snapshotId
|
|
671
|
+
}),
|
|
672
|
+
renderStages: workerManifest.renderStages,
|
|
673
|
+
representationBands: representations,
|
|
674
|
+
accelerationStructureUpdates: workerManifest.accelerationStructureUpdates,
|
|
675
|
+
workerManifest
|
|
676
|
+
});
|
|
677
|
+
}
|
|
490
678
|
function clamp01(value) {
|
|
491
679
|
return Math.min(1, Math.max(0, value));
|
|
492
680
|
}
|
|
@@ -961,12 +1149,16 @@ var defaultRendererClearColor = DEFAULT_CLEAR_COLOR;
|
|
|
961
1149
|
0 && (module.exports = {
|
|
962
1150
|
bindRendererToXrManager,
|
|
963
1151
|
createGpuRenderer,
|
|
1152
|
+
createRayTracingRenderPlan,
|
|
964
1153
|
createRendererDebugHooks,
|
|
965
1154
|
defaultRendererClearColor,
|
|
966
1155
|
defaultRendererWorkerProfile,
|
|
967
1156
|
getRendererWorkerManifest,
|
|
968
1157
|
getRendererWorkerProfile,
|
|
1158
|
+
rendererAccelerationStructureUpdateClasses,
|
|
969
1159
|
rendererDebugOwner,
|
|
1160
|
+
rendererRayTracingStageOrder,
|
|
1161
|
+
rendererRepresentationBands,
|
|
970
1162
|
rendererWorkerManifests,
|
|
971
1163
|
rendererWorkerProfileNames,
|
|
972
1164
|
rendererWorkerProfiles,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"sourcesContent":["const DEFAULT_CLEAR_COLOR = Object.freeze([0.07, 0.11, 0.18, 1.0]);\nconst DEFAULT_CANVAS_SELECTOR = \"canvas[data-plasius-gpu-renderer]\";\nexport const rendererDebugOwner = \"renderer\";\nexport const rendererWorkerQueueClass = \"render\";\nexport const defaultRendererWorkerProfile = \"realtime\";\n\nfunction buildRendererWorkerBudgetLevels(jobType, queueClass, levels) {\n return Object.freeze(\n levels.map((level) =>\n Object.freeze({\n id: level.id,\n estimatedCostMs: level.estimatedCostMs,\n config: Object.freeze({\n maxDispatchesPerFrame: level.config.maxDispatchesPerFrame,\n maxJobsPerDispatch: level.config.maxJobsPerDispatch,\n cadenceDivisor: level.config.cadenceDivisor,\n workgroupScale: level.config.workgroupScale,\n maxQueueDepth: level.config.maxQueueDepth,\n metadata: Object.freeze({\n owner: rendererDebugOwner,\n queueClass,\n jobType,\n quality: level.id,\n }),\n }),\n })\n )\n );\n}\n\nconst rendererWorkerProfileSpecs = {\n realtime: {\n description:\n \"Frame-stage DAG for flat rendering with visibility, main encode, post-processing, and submit.\",\n suggestedAllocationIds: [\n \"renderer.surface.current\",\n \"renderer.visibility.worklist\",\n \"renderer.post-process.history\",\n ],\n jobs: {\n acquire: {\n priority: 5,\n dependencies: [],\n domain: \"resolution\",\n importance: \"critical\",\n levels: [\n {\n id: \"fixed\",\n estimatedCostMs: 0.2,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 1,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 1,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.surface.current\"],\n },\n visibility: {\n priority: 4,\n dependencies: [],\n domain: \"geometry\",\n importance: \"high\",\n levels: [\n {\n id: \"low\",\n estimatedCostMs: 0.4,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 256,\n },\n },\n {\n id: \"medium\",\n estimatedCostMs: 0.8,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 256,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 384,\n },\n },\n {\n id: \"high\",\n estimatedCostMs: 1.2,\n config: {\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 512,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 512,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.visibility.worklist\"],\n },\n mainEncode: {\n priority: 4,\n dependencies: [\"acquire\", \"visibility\"],\n domain: \"geometry\",\n importance: \"critical\",\n levels: [\n {\n id: \"low\",\n estimatedCostMs: 1.2,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 0.6,\n maxQueueDepth: 192,\n },\n },\n {\n id: \"medium\",\n estimatedCostMs: 2.1,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 256,\n cadenceDivisor: 1,\n workgroupScale: 0.8,\n maxQueueDepth: 256,\n },\n },\n {\n id: \"high\",\n estimatedCostMs: 3,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 384,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 384,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.surface.current\"],\n },\n postProcess: {\n priority: 3,\n dependencies: [\"mainEncode\"],\n domain: \"post-processing\",\n importance: \"high\",\n levels: [\n {\n id: \"low\",\n estimatedCostMs: 0.5,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 96,\n },\n },\n {\n id: \"medium\",\n estimatedCostMs: 0.9,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 128,\n },\n },\n {\n id: \"high\",\n estimatedCostMs: 1.4,\n config: {\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 192,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 192,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.post-process.history\"],\n },\n submit: {\n priority: 2,\n dependencies: [\"postProcess\"],\n domain: \"resolution\",\n importance: \"critical\",\n levels: [\n {\n id: \"fixed\",\n estimatedCostMs: 0.2,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 1,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 1,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.surface.current\"],\n },\n },\n },\n xr: {\n description:\n \"Frame-stage DAG for XR rendering with late-latch coordination before main encode and submit.\",\n suggestedAllocationIds: [\n \"renderer.xr.surface.current\",\n \"renderer.xr.visibility.worklist\",\n ],\n jobs: {\n acquire: {\n priority: 5,\n dependencies: [],\n domain: \"xr\",\n importance: \"critical\",\n levels: [\n {\n id: \"fixed\",\n estimatedCostMs: 0.2,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 1,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 1,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.xr.surface.current\"],\n },\n visibility: {\n priority: 4,\n dependencies: [],\n domain: \"geometry\",\n importance: \"high\",\n levels: [\n {\n id: \"low\",\n estimatedCostMs: 0.5,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 96,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 192,\n },\n },\n {\n id: \"medium\",\n estimatedCostMs: 0.9,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 192,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 256,\n },\n },\n {\n id: \"high\",\n estimatedCostMs: 1.3,\n config: {\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 320,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 320,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.xr.visibility.worklist\"],\n },\n lateLatch: {\n priority: 5,\n dependencies: [\"acquire\"],\n domain: \"xr\",\n importance: \"critical\",\n levels: [\n {\n id: \"fixed\",\n estimatedCostMs: 0.15,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 1,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 1,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.xr.surface.current\"],\n },\n mainEncode: {\n priority: 4,\n dependencies: [\"visibility\", \"lateLatch\"],\n domain: \"xr\",\n importance: \"critical\",\n levels: [\n {\n id: \"low\",\n estimatedCostMs: 1.1,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 96,\n cadenceDivisor: 1,\n workgroupScale: 0.6,\n maxQueueDepth: 128,\n },\n },\n {\n id: \"medium\",\n estimatedCostMs: 1.8,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 192,\n cadenceDivisor: 1,\n workgroupScale: 0.8,\n maxQueueDepth: 192,\n },\n },\n {\n id: \"high\",\n estimatedCostMs: 2.6,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 256,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 256,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.xr.surface.current\"],\n },\n submit: {\n priority: 2,\n dependencies: [\"mainEncode\"],\n domain: \"xr\",\n importance: \"critical\",\n levels: [\n {\n id: \"fixed\",\n estimatedCostMs: 0.2,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 1,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 1,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.xr.surface.current\"],\n },\n },\n },\n};\n\nfunction buildRendererWorkerProfile(name, spec) {\n return Object.freeze({\n name,\n description: spec.description,\n jobs: Object.freeze(Object.keys(spec.jobs)),\n });\n}\n\nfunction buildRendererWorkerManifestJob(profileName, jobName, spec) {\n const label = `renderer.${profileName}.${jobName}`;\n return Object.freeze({\n key: jobName,\n label,\n worker: Object.freeze({\n jobType: label,\n queueClass: rendererWorkerQueueClass,\n priority: spec.priority,\n dependencies: Object.freeze(\n spec.dependencies.map((dependency) => `renderer.${profileName}.${dependency}`)\n ),\n schedulerMode: \"dag\",\n }),\n performance: Object.freeze({\n id: label,\n jobType: label,\n queueClass: rendererWorkerQueueClass,\n domain: spec.domain,\n authority: \"visual\",\n importance: spec.importance,\n levels: buildRendererWorkerBudgetLevels(\n label,\n rendererWorkerQueueClass,\n spec.levels\n ),\n }),\n debug: Object.freeze({\n owner: rendererDebugOwner,\n queueClass: rendererWorkerQueueClass,\n jobType: label,\n tags: Object.freeze([\"renderer\", profileName, jobName, spec.domain]),\n suggestedAllocationIds: Object.freeze([...spec.suggestedAllocationIds]),\n }),\n });\n}\n\nfunction buildRendererWorkerManifest(name, spec) {\n return Object.freeze({\n schemaVersion: 1,\n owner: rendererDebugOwner,\n profile: name,\n description: spec.description,\n queueClass: rendererWorkerQueueClass,\n schedulerMode: \"dag\",\n suggestedAllocationIds: Object.freeze([...spec.suggestedAllocationIds]),\n jobs: Object.freeze(\n Object.entries(spec.jobs).map(([jobName, jobSpec]) =>\n buildRendererWorkerManifestJob(name, jobName, jobSpec)\n )\n ),\n });\n}\n\nexport const rendererWorkerProfiles = Object.freeze(\n Object.fromEntries(\n Object.entries(rendererWorkerProfileSpecs).map(([name, spec]) => [\n name,\n buildRendererWorkerProfile(name, spec),\n ])\n )\n);\n\nexport const rendererWorkerProfileNames = Object.freeze(\n Object.keys(rendererWorkerProfiles)\n);\n\nexport const rendererWorkerManifests = Object.freeze(\n Object.fromEntries(\n Object.entries(rendererWorkerProfileSpecs).map(([name, spec]) => [\n name,\n buildRendererWorkerManifest(name, spec),\n ])\n )\n);\n\nexport function getRendererWorkerProfile(name = defaultRendererWorkerProfile) {\n const profile = rendererWorkerProfiles[name];\n if (!profile) {\n const available = rendererWorkerProfileNames.join(\", \");\n throw new Error(`Unknown renderer worker profile \"${name}\". Available: ${available}.`);\n }\n return profile;\n}\n\nexport function getRendererWorkerManifest(name = defaultRendererWorkerProfile) {\n const manifest = rendererWorkerManifests[name];\n if (!manifest) {\n const available = rendererWorkerProfileNames.join(\", \");\n throw new Error(`Unknown renderer worker profile \"${name}\". Available: ${available}.`);\n }\n return manifest;\n}\n\nfunction clamp01(value) {\n return Math.min(1, Math.max(0, value));\n}\n\nfunction parseHexChannel(channel) {\n return parseInt(channel, 16) / 255;\n}\n\nfunction normalizeColor(value) {\n if (Array.isArray(value)) {\n const [r = 0, g = 0, b = 0, a = 1] = value;\n return [clamp01(Number(r) || 0), clamp01(Number(g) || 0), clamp01(Number(b) || 0), clamp01(Number(a) || 0)];\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (/^#[0-9a-f]{3}$/i.test(trimmed)) {\n const r = trimmed[1];\n const g = trimmed[2];\n const b = trimmed[3];\n return [\n parseHexChannel(r + r),\n parseHexChannel(g + g),\n parseHexChannel(b + b),\n 1,\n ];\n }\n if (/^#[0-9a-f]{6}$/i.test(trimmed)) {\n return [\n parseHexChannel(trimmed.slice(1, 3)),\n parseHexChannel(trimmed.slice(3, 5)),\n parseHexChannel(trimmed.slice(5, 7)),\n 1,\n ];\n }\n }\n\n return [...DEFAULT_CLEAR_COLOR];\n}\n\nfunction readPositiveNumber(name, value) {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n throw new Error(`${name} must be a finite number greater than zero.`);\n }\n return value;\n}\n\nfunction now() {\n if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\n return performance.now();\n }\n return Date.now();\n}\n\nfunction normalizeFrameId(value) {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(\"frameIdFactory must return a non-empty string.\");\n }\n return value.trim();\n}\n\nfunction resolveTargetFrameTimeMs(options, event) {\n const {\n targetFrameTimeMs: fixedTargetFrameTimeMs,\n targetFrameRate,\n getTargetFrameTimeMs,\n } = options;\n\n if (typeof getTargetFrameTimeMs === \"function\") {\n const resolved = getTargetFrameTimeMs(event);\n return readPositiveNumber(\"getTargetFrameTimeMs()\", resolved);\n }\n\n if (fixedTargetFrameTimeMs !== undefined) {\n return fixedTargetFrameTimeMs;\n }\n\n if (targetFrameRate !== undefined) {\n return 1000 / targetFrameRate;\n }\n\n return undefined;\n}\n\nexport function createRendererDebugHooks(options = {}) {\n const {\n debugSession,\n targetFrameTimeMs,\n targetFrameRate,\n getTargetFrameTimeMs,\n onFrameStart,\n onFrameComplete,\n } = options;\n\n if (!debugSession || typeof debugSession.recordFrame !== \"function\") {\n throw new Error(\n \"debugSession must expose recordFrame(sample). Use @plasius/gpu-debug createGpuDebugSession().\"\n );\n }\n\n const fixedTargetFrameTimeMs = readPositiveNumber(\n \"targetFrameTimeMs\",\n targetFrameTimeMs\n );\n const fixedTargetFrameRate = readPositiveNumber(\n \"targetFrameRate\",\n targetFrameRate\n );\n\n if (\n fixedTargetFrameTimeMs !== undefined &&\n fixedTargetFrameRate !== undefined\n ) {\n throw new Error(\n \"Provide either targetFrameTimeMs or targetFrameRate, not both.\"\n );\n }\n\n if (\n getTargetFrameTimeMs !== undefined &&\n typeof getTargetFrameTimeMs !== \"function\"\n ) {\n throw new Error(\"getTargetFrameTimeMs must be a function when provided.\");\n }\n\n const resolvedOptions = {\n targetFrameTimeMs: fixedTargetFrameTimeMs,\n targetFrameRate: fixedTargetFrameRate,\n getTargetFrameTimeMs,\n };\n\n return {\n onFrameStart(event) {\n if (typeof onFrameStart === \"function\") {\n onFrameStart({\n ...event,\n owner: rendererDebugOwner,\n });\n }\n },\n onFrameComplete(event) {\n const resolvedTargetFrameTimeMs = resolveTargetFrameTimeMs(\n resolvedOptions,\n event\n );\n\n if (\n typeof event.frameTimeMs === \"number\" &&\n Number.isFinite(event.frameTimeMs) &&\n event.frameTimeMs > 0\n ) {\n debugSession.recordFrame({\n frameId: event.frameId,\n frameTimeMs: event.frameTimeMs,\n targetFrameTimeMs: resolvedTargetFrameTimeMs,\n });\n }\n\n if (typeof onFrameComplete === \"function\") {\n onFrameComplete({\n ...event,\n owner: rendererDebugOwner,\n targetFrameTimeMs: resolvedTargetFrameTimeMs,\n });\n }\n },\n };\n}\n\nfunction readNavigator(navigatorOverride) {\n const currentNavigator = navigatorOverride ?? globalThis.navigator;\n if (!currentNavigator || typeof currentNavigator !== \"object\") {\n throw new Error(\"Navigator unavailable. Provide a browser-like navigator object.\");\n }\n return currentNavigator;\n}\n\nfunction readDocument(documentOverride) {\n const doc = documentOverride ?? globalThis.document;\n if (!doc || typeof doc !== \"object\") {\n throw new Error(\"Document unavailable. Provide a browser-like document object.\");\n }\n return doc;\n}\n\nfunction resolveCanvas(canvasOrSelector, documentOverride) {\n if (canvasOrSelector && typeof canvasOrSelector === \"object\") {\n return canvasOrSelector;\n }\n\n const doc = readDocument(documentOverride);\n const selector =\n typeof canvasOrSelector === \"string\" && canvasOrSelector.trim().length > 0\n ? canvasOrSelector\n : DEFAULT_CANVAS_SELECTOR;\n const resolved = doc.querySelector(selector);\n if (!resolved) {\n throw new Error(`Unable to find canvas for selector \"${selector}\".`);\n }\n return resolved;\n}\n\nfunction readGpu(navigatorOverride) {\n const currentNavigator = readNavigator(navigatorOverride);\n const gpu = currentNavigator.gpu;\n if (!gpu || typeof gpu.requestAdapter !== \"function\") {\n throw new Error(\"WebGPU runtime unavailable. navigator.gpu is missing.\");\n }\n return gpu;\n}\n\nfunction configureContext(context, device, format, alphaMode) {\n if (typeof context.configure !== \"function\") {\n throw new Error(\"Canvas WebGPU context does not support configure().\");\n }\n context.configure({\n device,\n format,\n alphaMode,\n });\n}\n\nfunction createRenderPassDescriptor(view, clearColor) {\n return {\n colorAttachments: [\n {\n view,\n loadOp: \"clear\",\n clearValue: {\n r: clearColor[0],\n g: clearColor[1],\n b: clearColor[2],\n a: clearColor[3],\n },\n storeOp: \"store\",\n },\n ],\n };\n}\n\nexport function supportsWebGpu(options = {}) {\n try {\n const gpu = readGpu(options.navigator);\n return Boolean(gpu);\n } catch {\n return false;\n }\n}\n\nexport async function createGpuRenderer(options = {}) {\n const {\n canvas,\n navigator: navigatorOverride,\n document: documentOverride,\n powerPreference = \"high-performance\",\n alpha = true,\n format,\n clearColor = DEFAULT_CLEAR_COLOR,\n requestAnimationFrame = globalThis.requestAnimationFrame?.bind(globalThis),\n cancelAnimationFrame = globalThis.cancelAnimationFrame?.bind(globalThis),\n frameIdFactory,\n onFrameStart,\n onBeforeEncode,\n onAfterSubmit,\n onFrameComplete,\n } = options;\n\n const gpu = readGpu(navigatorOverride);\n const adapter = await gpu.requestAdapter({ powerPreference });\n if (!adapter) {\n throw new Error(\"Unable to obtain GPU adapter.\");\n }\n\n const device = await adapter.requestDevice();\n const targetCanvas = resolveCanvas(canvas, documentOverride);\n const context = targetCanvas.getContext?.(\"webgpu\");\n if (!context) {\n throw new Error(\"Unable to obtain WebGPU canvas context.\");\n }\n\n const resolvedFormat =\n format ||\n (typeof gpu.getPreferredCanvasFormat === \"function\"\n ? gpu.getPreferredCanvasFormat()\n : \"bgra8unorm\");\n\n configureContext(context, device, resolvedFormat, alpha ? \"premultiplied\" : \"opaque\");\n\n let running = false;\n let destroyed = false;\n let frame = 0;\n let lastTimestamp = 0;\n let rafId = null;\n let clear = normalizeColor(clearColor);\n let xrActive = false;\n let detachXrBinding = null;\n\n const renderOnce = (timestamp = now()) => {\n if (destroyed) {\n throw new Error(\"Renderer was destroyed.\");\n }\n\n const frameNumber = frame + 1;\n const frameId = normalizeFrameId(\n typeof frameIdFactory === \"function\"\n ? frameIdFactory({\n frame: frameNumber,\n timestamp,\n canvas: targetCanvas,\n xrActive,\n })\n : `renderer.frame.${frameNumber}`\n );\n const frameTimeMs =\n lastTimestamp > 0 ? Math.max(0, timestamp - lastTimestamp) : undefined;\n\n if (typeof onFrameStart === \"function\") {\n onFrameStart({\n frame: frameNumber,\n frameId,\n frameTimeMs,\n timestamp,\n device,\n context,\n canvas: targetCanvas,\n xrActive,\n });\n }\n\n const texture = context.getCurrentTexture?.();\n if (!texture || typeof texture.createView !== \"function\") {\n throw new Error(\"WebGPU context returned an invalid current texture.\");\n }\n\n const encoder = device.createCommandEncoder({\n label: `plasius.gpu-renderer.frame.${frame}`,\n });\n const view = texture.createView();\n\n const pass = encoder.beginRenderPass(createRenderPassDescriptor(view, clear));\n\n if (typeof onBeforeEncode === \"function\") {\n onBeforeEncode({\n frame,\n frameNumber,\n frameId,\n frameTimeMs,\n timestamp,\n device,\n context,\n encoder,\n pass,\n canvas: targetCanvas,\n xrActive,\n });\n }\n\n if (typeof pass.end === \"function\") {\n pass.end();\n }\n\n const commandBuffer = encoder.finish();\n device.queue.submit([commandBuffer]);\n\n frame = frameNumber;\n lastTimestamp = timestamp;\n\n if (typeof onAfterSubmit === \"function\") {\n onAfterSubmit({\n frame: frameNumber,\n frameNumber,\n frameId,\n frameTimeMs,\n timestamp,\n device,\n context,\n canvas: targetCanvas,\n xrActive,\n });\n }\n\n if (typeof onFrameComplete === \"function\") {\n onFrameComplete({\n frame: frameNumber,\n frameId,\n frameTimeMs,\n timestamp,\n device,\n context,\n canvas: targetCanvas,\n xrActive,\n });\n }\n\n return {\n frame: frameNumber,\n frameId,\n frameTimeMs,\n timestamp,\n };\n };\n\n const tick = (timestamp) => {\n if (!running || destroyed) {\n return;\n }\n renderOnce(timestamp);\n if (typeof requestAnimationFrame === \"function\") {\n rafId = requestAnimationFrame(tick);\n }\n };\n\n const start = () => {\n if (destroyed) {\n throw new Error(\"Renderer was destroyed.\");\n }\n if (running) {\n return false;\n }\n running = true;\n if (typeof requestAnimationFrame === \"function\") {\n rafId = requestAnimationFrame(tick);\n } else {\n renderOnce();\n }\n return true;\n };\n\n const stop = () => {\n if (!running) {\n return false;\n }\n running = false;\n if (rafId !== null && typeof cancelAnimationFrame === \"function\") {\n cancelAnimationFrame(rafId);\n }\n rafId = null;\n return true;\n };\n\n const resize = (cssWidth, cssHeight, devicePixelRatio = globalThis.devicePixelRatio ?? 1) => {\n const width = Math.max(1, Math.floor(cssWidth * devicePixelRatio));\n const height = Math.max(1, Math.floor(cssHeight * devicePixelRatio));\n targetCanvas.width = width;\n targetCanvas.height = height;\n if (targetCanvas.style) {\n targetCanvas.style.width = `${Math.max(1, Math.floor(cssWidth))}px`;\n targetCanvas.style.height = `${Math.max(1, Math.floor(cssHeight))}px`;\n }\n return { width, height };\n };\n\n const setClearColor = (value) => {\n clear = normalizeColor(value);\n return [...clear];\n };\n\n const setXrActive = (active) => {\n xrActive = Boolean(active);\n };\n\n const getSnapshot = () => {\n const width = Number(targetCanvas.width) || 0;\n const height = Number(targetCanvas.height) || 0;\n return {\n running,\n frame,\n lastTimestamp,\n format: resolvedFormat,\n width,\n height,\n xrActive,\n };\n };\n\n const renderer = {\n canvas: targetCanvas,\n context,\n device,\n format: resolvedFormat,\n renderOnce,\n start,\n stop,\n resize,\n setClearColor,\n setXrActive,\n getSnapshot,\n bindXrManager(xrManager, bindOptions = {}) {\n if (detachXrBinding) {\n detachXrBinding();\n }\n detachXrBinding = bindRendererToXrManager(renderer, xrManager, bindOptions);\n return detachXrBinding;\n },\n destroy() {\n stop();\n destroyed = true;\n if (detachXrBinding) {\n detachXrBinding();\n detachXrBinding = null;\n }\n if (typeof context.unconfigure === \"function\") {\n context.unconfigure();\n }\n },\n };\n\n return renderer;\n}\n\nfunction snapshotFromXrManager(xrManager) {\n if (xrManager && typeof xrManager.getState === \"function\") {\n return xrManager.getState();\n }\n if (xrManager?.store && typeof xrManager.store.getSnapshot === \"function\") {\n return xrManager.store.getSnapshot();\n }\n return null;\n}\n\nexport function bindRendererToXrManager(renderer, xrManager, options = {}) {\n if (!xrManager || typeof xrManager.subscribe !== \"function\") {\n throw new Error(\"XR manager must expose subscribe(listener). Use @plasius/gpu-xr createXrManager().\");\n }\n\n const { onSessionStart, onSessionEnd } = options;\n let previousSession = null;\n\n const applyState = (state) => {\n const session = state?.activeSession ?? null;\n if (session === previousSession) {\n return;\n }\n\n previousSession = session;\n\n if (typeof renderer.setXrActive === \"function\") {\n renderer.setXrActive(Boolean(session));\n }\n\n if (session && typeof onSessionStart === \"function\") {\n onSessionStart(session, renderer);\n }\n\n if (!session && typeof onSessionEnd === \"function\") {\n onSessionEnd(renderer);\n }\n };\n\n applyState(snapshotFromXrManager(xrManager));\n return xrManager.subscribe(applyState);\n}\n\nexport const defaultRendererClearColor = DEFAULT_CLEAR_COLOR;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"sourcesContent":["const DEFAULT_CLEAR_COLOR = Object.freeze([0.07, 0.11, 0.18, 1.0]);\nconst DEFAULT_CANVAS_SELECTOR = \"canvas[data-plasius-gpu-renderer]\";\nexport const rendererDebugOwner = \"renderer\";\nexport const rendererWorkerQueueClass = \"render\";\nexport const defaultRendererWorkerProfile = \"realtime\";\nexport const rendererRepresentationBands = Object.freeze([\n \"near\",\n \"mid\",\n \"far\",\n \"horizon\",\n]);\nexport const rendererAccelerationStructureUpdateClasses = Object.freeze([\n \"static\",\n \"rigid-dynamic\",\n \"deforming\",\n \"proxy\",\n]);\nexport const rendererRayTracingStageOrder = Object.freeze([\n \"primaryVisibility\",\n \"shadowAssist\",\n \"opaqueFoundation\",\n \"rtDirectLighting\",\n \"rtReflections\",\n \"rtGlobalIllumination\",\n \"denoiseTemporal\",\n \"transparents\",\n \"composition\",\n \"present\",\n]);\n\nconst rendererRayTracingStageDefinitions = Object.freeze(\n rendererRayTracingStageOrder.map((key, index) =>\n Object.freeze({\n key,\n order: index + 1,\n required: true,\n description:\n {\n primaryVisibility: \"Primary visibility and depth preparation.\",\n shadowAssist: \"Shadow assist passes and regional shadow preparation.\",\n opaqueFoundation: \"Main opaque foundation for shading and tracing inputs.\",\n rtDirectLighting: \"Ray-traced direct lighting and premium shadows.\",\n rtReflections: \"Ray-traced reflections for important surfaces.\",\n rtGlobalIllumination: \"Selective ray-traced indirect lighting and GI.\",\n denoiseTemporal: \"Required denoise and temporal accumulation stage.\",\n transparents: \"Transparents, particles, and volumetrics composition.\",\n composition: \"Final world composition and color resolve.\",\n present: \"Presentation to the active surface.\",\n }[key],\n })\n )\n);\n\nconst rendererRepresentationBandPolicies = Object.freeze({\n near: Object.freeze({\n band: \"near\",\n rasterMode: \"full-live\",\n rtParticipation: \"premium\",\n shadowSource: \"ray-traced-primary\",\n temporalReuse: \"balanced\",\n updateCadenceDivisor: 1,\n }),\n mid: Object.freeze({\n band: \"mid\",\n rasterMode: \"simplified-live\",\n rtParticipation: \"selective\",\n shadowSource: \"regional-raster-and-proxy\",\n temporalReuse: \"aggressive\",\n updateCadenceDivisor: 2,\n }),\n far: Object.freeze({\n band: \"far\",\n rasterMode: \"proxy-or-cached\",\n rtParticipation: \"proxy\",\n shadowSource: \"merged-proxy-casters\",\n temporalReuse: \"high\",\n updateCadenceDivisor: 8,\n }),\n horizon: Object.freeze({\n band: \"horizon\",\n rasterMode: \"horizon-shell\",\n rtParticipation: \"disabled\",\n shadowSource: \"baked-impression\",\n temporalReuse: \"cached\",\n updateCadenceDivisor: 60,\n }),\n});\n\nconst rendererAccelerationStructurePolicies = Object.freeze(\n rendererAccelerationStructureUpdateClasses.map((updateClass) =>\n Object.freeze({\n updateClass,\n description:\n {\n static: \"Stable static world geometry with infrequent rebuilds.\",\n \"rigid-dynamic\":\n \"Rigid transforms that can be refit or relinked without full deformation updates.\",\n deforming:\n \"Skinned or vertex-deforming content treated as a managed RT cost center.\",\n proxy:\n \"Low-cost RT proxy or distant representation updates.\",\n }[updateClass],\n })\n )\n);\n\nfunction buildRendererWorkerBudgetLevels(jobType, queueClass, levels) {\n return Object.freeze(\n levels.map((level) =>\n Object.freeze({\n id: level.id,\n estimatedCostMs: level.estimatedCostMs,\n config: Object.freeze({\n maxDispatchesPerFrame: level.config.maxDispatchesPerFrame,\n maxJobsPerDispatch: level.config.maxJobsPerDispatch,\n cadenceDivisor: level.config.cadenceDivisor,\n workgroupScale: level.config.workgroupScale,\n maxQueueDepth: level.config.maxQueueDepth,\n metadata: Object.freeze({\n owner: rendererDebugOwner,\n queueClass,\n jobType,\n quality: level.id,\n }),\n }),\n })\n )\n );\n}\n\nconst rendererWorkerProfileSpecs = {\n realtime: {\n description:\n \"Frame-stage DAG for flat rendering with visibility, main encode, post-processing, and submit.\",\n suggestedAllocationIds: [\n \"renderer.surface.current\",\n \"renderer.visibility.worklist\",\n \"renderer.post-process.history\",\n ],\n jobs: {\n acquire: {\n priority: 5,\n dependencies: [],\n domain: \"resolution\",\n importance: \"critical\",\n levels: [\n {\n id: \"fixed\",\n estimatedCostMs: 0.2,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 1,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 1,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.surface.current\"],\n },\n visibility: {\n priority: 4,\n dependencies: [],\n domain: \"geometry\",\n importance: \"high\",\n levels: [\n {\n id: \"low\",\n estimatedCostMs: 0.4,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 256,\n },\n },\n {\n id: \"medium\",\n estimatedCostMs: 0.8,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 256,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 384,\n },\n },\n {\n id: \"high\",\n estimatedCostMs: 1.2,\n config: {\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 512,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 512,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.visibility.worklist\"],\n },\n mainEncode: {\n priority: 4,\n dependencies: [\"acquire\", \"visibility\"],\n domain: \"geometry\",\n importance: \"critical\",\n levels: [\n {\n id: \"low\",\n estimatedCostMs: 1.2,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 0.6,\n maxQueueDepth: 192,\n },\n },\n {\n id: \"medium\",\n estimatedCostMs: 2.1,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 256,\n cadenceDivisor: 1,\n workgroupScale: 0.8,\n maxQueueDepth: 256,\n },\n },\n {\n id: \"high\",\n estimatedCostMs: 3,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 384,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 384,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.surface.current\"],\n },\n postProcess: {\n priority: 3,\n dependencies: [\"mainEncode\"],\n domain: \"post-processing\",\n importance: \"high\",\n levels: [\n {\n id: \"low\",\n estimatedCostMs: 0.5,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 64,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 96,\n },\n },\n {\n id: \"medium\",\n estimatedCostMs: 0.9,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 128,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 128,\n },\n },\n {\n id: \"high\",\n estimatedCostMs: 1.4,\n config: {\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 192,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 192,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.post-process.history\"],\n },\n submit: {\n priority: 2,\n dependencies: [\"postProcess\"],\n domain: \"resolution\",\n importance: \"critical\",\n levels: [\n {\n id: \"fixed\",\n estimatedCostMs: 0.2,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 1,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 1,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.surface.current\"],\n },\n },\n },\n xr: {\n description:\n \"Frame-stage DAG for XR rendering with late-latch coordination before main encode and submit.\",\n suggestedAllocationIds: [\n \"renderer.xr.surface.current\",\n \"renderer.xr.visibility.worklist\",\n ],\n jobs: {\n acquire: {\n priority: 5,\n dependencies: [],\n domain: \"xr\",\n importance: \"critical\",\n levels: [\n {\n id: \"fixed\",\n estimatedCostMs: 0.2,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 1,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 1,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.xr.surface.current\"],\n },\n visibility: {\n priority: 4,\n dependencies: [],\n domain: \"geometry\",\n importance: \"high\",\n levels: [\n {\n id: \"low\",\n estimatedCostMs: 0.5,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 96,\n cadenceDivisor: 2,\n workgroupScale: 0.5,\n maxQueueDepth: 192,\n },\n },\n {\n id: \"medium\",\n estimatedCostMs: 0.9,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 192,\n cadenceDivisor: 1,\n workgroupScale: 0.75,\n maxQueueDepth: 256,\n },\n },\n {\n id: \"high\",\n estimatedCostMs: 1.3,\n config: {\n maxDispatchesPerFrame: 2,\n maxJobsPerDispatch: 320,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 320,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.xr.visibility.worklist\"],\n },\n lateLatch: {\n priority: 5,\n dependencies: [\"acquire\"],\n domain: \"xr\",\n importance: \"critical\",\n levels: [\n {\n id: \"fixed\",\n estimatedCostMs: 0.15,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 1,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 1,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.xr.surface.current\"],\n },\n mainEncode: {\n priority: 4,\n dependencies: [\"visibility\", \"lateLatch\"],\n domain: \"xr\",\n importance: \"critical\",\n levels: [\n {\n id: \"low\",\n estimatedCostMs: 1.1,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 96,\n cadenceDivisor: 1,\n workgroupScale: 0.6,\n maxQueueDepth: 128,\n },\n },\n {\n id: \"medium\",\n estimatedCostMs: 1.8,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 192,\n cadenceDivisor: 1,\n workgroupScale: 0.8,\n maxQueueDepth: 192,\n },\n },\n {\n id: \"high\",\n estimatedCostMs: 2.6,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 256,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 256,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.xr.surface.current\"],\n },\n submit: {\n priority: 2,\n dependencies: [\"mainEncode\"],\n domain: \"xr\",\n importance: \"critical\",\n levels: [\n {\n id: \"fixed\",\n estimatedCostMs: 0.2,\n config: {\n maxDispatchesPerFrame: 1,\n maxJobsPerDispatch: 1,\n cadenceDivisor: 1,\n workgroupScale: 1,\n maxQueueDepth: 1,\n },\n },\n ],\n suggestedAllocationIds: [\"renderer.xr.surface.current\"],\n },\n },\n },\n};\n\nfunction buildRendererInputBoundary(profile) {\n return Object.freeze({\n type: \"stable-visual-snapshot\",\n owner: rendererDebugOwner,\n profile,\n authority: \"visual\",\n source: \"scene-preparation\",\n stable: true,\n });\n}\n\nfunction buildRendererRenderStages(profile) {\n return Object.freeze(\n rendererRayTracingStageDefinitions.map((stage) =>\n Object.freeze({\n ...stage,\n profile,\n workerJobKeys:\n profile === \"xr\" && stage.key === \"primaryVisibility\"\n ? Object.freeze([\"lateLatch\", \"visibility\"])\n : stage.key === \"present\"\n ? Object.freeze([\"submit\"])\n : stage.key === \"denoiseTemporal\" ||\n stage.key === \"transparents\" ||\n stage.key === \"composition\"\n ? Object.freeze([\"postProcess\"])\n : stage.key === \"primaryVisibility\"\n ? Object.freeze([\"visibility\"])\n : stage.key === \"shadowAssist\" ||\n stage.key === \"opaqueFoundation\" ||\n stage.key === \"rtDirectLighting\" ||\n stage.key === \"rtReflections\" ||\n stage.key === \"rtGlobalIllumination\"\n ? Object.freeze([\"mainEncode\"])\n : Object.freeze([\"mainEncode\"]),\n })\n )\n );\n}\n\nfunction buildRendererRepresentationBands(profile) {\n return Object.freeze(\n rendererRepresentationBands.map((band) =>\n Object.freeze({\n ...rendererRepresentationBandPolicies[band],\n profile,\n })\n )\n );\n}\n\nfunction buildRendererAccelerationStructureUpdates(profile) {\n return Object.freeze(\n rendererAccelerationStructurePolicies.map((policy) =>\n Object.freeze({\n ...policy,\n profile,\n })\n )\n );\n}\n\nfunction assertRendererIdentifier(name, value) {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`${name} must be a non-empty string.`);\n }\n return value.trim();\n}\n\nfunction buildRendererWorkerProfile(name, spec) {\n return Object.freeze({\n name,\n description: spec.description,\n jobs: Object.freeze(Object.keys(spec.jobs)),\n });\n}\n\nfunction buildRendererWorkerManifestJob(profileName, jobName, spec) {\n const label = `renderer.${profileName}.${jobName}`;\n return Object.freeze({\n key: jobName,\n label,\n worker: Object.freeze({\n jobType: label,\n queueClass: rendererWorkerQueueClass,\n priority: spec.priority,\n dependencies: Object.freeze(\n spec.dependencies.map((dependency) => `renderer.${profileName}.${dependency}`)\n ),\n schedulerMode: \"dag\",\n }),\n performance: Object.freeze({\n id: label,\n jobType: label,\n queueClass: rendererWorkerQueueClass,\n domain: spec.domain,\n authority: \"visual\",\n importance: spec.importance,\n levels: buildRendererWorkerBudgetLevels(\n label,\n rendererWorkerQueueClass,\n spec.levels\n ),\n }),\n debug: Object.freeze({\n owner: rendererDebugOwner,\n queueClass: rendererWorkerQueueClass,\n jobType: label,\n tags: Object.freeze([\"renderer\", profileName, jobName, spec.domain]),\n suggestedAllocationIds: Object.freeze([...spec.suggestedAllocationIds]),\n }),\n });\n}\n\nfunction buildRendererWorkerManifest(name, spec) {\n return Object.freeze({\n schemaVersion: 1,\n owner: rendererDebugOwner,\n profile: name,\n description: spec.description,\n queueClass: rendererWorkerQueueClass,\n schedulerMode: \"dag\",\n inputBoundary: buildRendererInputBoundary(name),\n renderStages: buildRendererRenderStages(name),\n representationBands: buildRendererRepresentationBands(name),\n accelerationStructureUpdates: buildRendererAccelerationStructureUpdates(name),\n suggestedAllocationIds: Object.freeze([...spec.suggestedAllocationIds]),\n jobs: Object.freeze(\n Object.entries(spec.jobs).map(([jobName, jobSpec]) =>\n buildRendererWorkerManifestJob(name, jobName, jobSpec)\n )\n ),\n });\n}\n\nexport const rendererWorkerProfiles = Object.freeze(\n Object.fromEntries(\n Object.entries(rendererWorkerProfileSpecs).map(([name, spec]) => [\n name,\n buildRendererWorkerProfile(name, spec),\n ])\n )\n);\n\nexport const rendererWorkerProfileNames = Object.freeze(\n Object.keys(rendererWorkerProfiles)\n);\n\nexport const rendererWorkerManifests = Object.freeze(\n Object.fromEntries(\n Object.entries(rendererWorkerProfileSpecs).map(([name, spec]) => [\n name,\n buildRendererWorkerManifest(name, spec),\n ])\n )\n);\n\nexport function getRendererWorkerProfile(name = defaultRendererWorkerProfile) {\n const profile = rendererWorkerProfiles[name];\n if (!profile) {\n const available = rendererWorkerProfileNames.join(\", \");\n throw new Error(`Unknown renderer worker profile \"${name}\". Available: ${available}.`);\n }\n return profile;\n}\n\nexport function getRendererWorkerManifest(name = defaultRendererWorkerProfile) {\n const manifest = rendererWorkerManifests[name];\n if (!manifest) {\n const available = rendererWorkerProfileNames.join(\", \");\n throw new Error(`Unknown renderer worker profile \"${name}\". Available: ${available}.`);\n }\n return manifest;\n}\n\nexport function createRayTracingRenderPlan(options = {}) {\n const profile = options.profile ?? defaultRendererWorkerProfile;\n const snapshotId = assertRendererIdentifier(\n \"snapshotId\",\n options.snapshotId\n );\n const workerManifest = getRendererWorkerManifest(profile);\n const representations = Array.isArray(options.representations)\n ? Object.freeze(\n options.representations.map((representation, index) => {\n if (!representation || typeof representation !== \"object\") {\n throw new Error(`representations[${index}] must be an object.`);\n }\n const band = assertRendererIdentifier(\n `representations[${index}].band`,\n representation.band\n );\n if (!rendererRepresentationBands.includes(band)) {\n throw new Error(\n `representations[${index}].band must be one of: ${rendererRepresentationBands.join(\", \")}.`\n );\n }\n return Object.freeze({\n ...representation,\n band,\n });\n })\n )\n : workerManifest.representationBands;\n\n return Object.freeze({\n schemaVersion: 1,\n owner: rendererDebugOwner,\n profile,\n inputBoundary: Object.freeze({\n ...workerManifest.inputBoundary,\n snapshotId,\n }),\n renderStages: workerManifest.renderStages,\n representationBands: representations,\n accelerationStructureUpdates: workerManifest.accelerationStructureUpdates,\n workerManifest,\n });\n}\n\nfunction clamp01(value) {\n return Math.min(1, Math.max(0, value));\n}\n\nfunction parseHexChannel(channel) {\n return parseInt(channel, 16) / 255;\n}\n\nfunction normalizeColor(value) {\n if (Array.isArray(value)) {\n const [r = 0, g = 0, b = 0, a = 1] = value;\n return [clamp01(Number(r) || 0), clamp01(Number(g) || 0), clamp01(Number(b) || 0), clamp01(Number(a) || 0)];\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (/^#[0-9a-f]{3}$/i.test(trimmed)) {\n const r = trimmed[1];\n const g = trimmed[2];\n const b = trimmed[3];\n return [\n parseHexChannel(r + r),\n parseHexChannel(g + g),\n parseHexChannel(b + b),\n 1,\n ];\n }\n if (/^#[0-9a-f]{6}$/i.test(trimmed)) {\n return [\n parseHexChannel(trimmed.slice(1, 3)),\n parseHexChannel(trimmed.slice(3, 5)),\n parseHexChannel(trimmed.slice(5, 7)),\n 1,\n ];\n }\n }\n\n return [...DEFAULT_CLEAR_COLOR];\n}\n\nfunction readPositiveNumber(name, value) {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n throw new Error(`${name} must be a finite number greater than zero.`);\n }\n return value;\n}\n\nfunction now() {\n if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\n return performance.now();\n }\n return Date.now();\n}\n\nfunction normalizeFrameId(value) {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(\"frameIdFactory must return a non-empty string.\");\n }\n return value.trim();\n}\n\nfunction resolveTargetFrameTimeMs(options, event) {\n const {\n targetFrameTimeMs: fixedTargetFrameTimeMs,\n targetFrameRate,\n getTargetFrameTimeMs,\n } = options;\n\n if (typeof getTargetFrameTimeMs === \"function\") {\n const resolved = getTargetFrameTimeMs(event);\n return readPositiveNumber(\"getTargetFrameTimeMs()\", resolved);\n }\n\n if (fixedTargetFrameTimeMs !== undefined) {\n return fixedTargetFrameTimeMs;\n }\n\n if (targetFrameRate !== undefined) {\n return 1000 / targetFrameRate;\n }\n\n return undefined;\n}\n\nexport function createRendererDebugHooks(options = {}) {\n const {\n debugSession,\n targetFrameTimeMs,\n targetFrameRate,\n getTargetFrameTimeMs,\n onFrameStart,\n onFrameComplete,\n } = options;\n\n if (!debugSession || typeof debugSession.recordFrame !== \"function\") {\n throw new Error(\n \"debugSession must expose recordFrame(sample). Use @plasius/gpu-debug createGpuDebugSession().\"\n );\n }\n\n const fixedTargetFrameTimeMs = readPositiveNumber(\n \"targetFrameTimeMs\",\n targetFrameTimeMs\n );\n const fixedTargetFrameRate = readPositiveNumber(\n \"targetFrameRate\",\n targetFrameRate\n );\n\n if (\n fixedTargetFrameTimeMs !== undefined &&\n fixedTargetFrameRate !== undefined\n ) {\n throw new Error(\n \"Provide either targetFrameTimeMs or targetFrameRate, not both.\"\n );\n }\n\n if (\n getTargetFrameTimeMs !== undefined &&\n typeof getTargetFrameTimeMs !== \"function\"\n ) {\n throw new Error(\"getTargetFrameTimeMs must be a function when provided.\");\n }\n\n const resolvedOptions = {\n targetFrameTimeMs: fixedTargetFrameTimeMs,\n targetFrameRate: fixedTargetFrameRate,\n getTargetFrameTimeMs,\n };\n\n return {\n onFrameStart(event) {\n if (typeof onFrameStart === \"function\") {\n onFrameStart({\n ...event,\n owner: rendererDebugOwner,\n });\n }\n },\n onFrameComplete(event) {\n const resolvedTargetFrameTimeMs = resolveTargetFrameTimeMs(\n resolvedOptions,\n event\n );\n\n if (\n typeof event.frameTimeMs === \"number\" &&\n Number.isFinite(event.frameTimeMs) &&\n event.frameTimeMs > 0\n ) {\n debugSession.recordFrame({\n frameId: event.frameId,\n frameTimeMs: event.frameTimeMs,\n targetFrameTimeMs: resolvedTargetFrameTimeMs,\n });\n }\n\n if (typeof onFrameComplete === \"function\") {\n onFrameComplete({\n ...event,\n owner: rendererDebugOwner,\n targetFrameTimeMs: resolvedTargetFrameTimeMs,\n });\n }\n },\n };\n}\n\nfunction readNavigator(navigatorOverride) {\n const currentNavigator = navigatorOverride ?? globalThis.navigator;\n if (!currentNavigator || typeof currentNavigator !== \"object\") {\n throw new Error(\"Navigator unavailable. Provide a browser-like navigator object.\");\n }\n return currentNavigator;\n}\n\nfunction readDocument(documentOverride) {\n const doc = documentOverride ?? globalThis.document;\n if (!doc || typeof doc !== \"object\") {\n throw new Error(\"Document unavailable. Provide a browser-like document object.\");\n }\n return doc;\n}\n\nfunction resolveCanvas(canvasOrSelector, documentOverride) {\n if (canvasOrSelector && typeof canvasOrSelector === \"object\") {\n return canvasOrSelector;\n }\n\n const doc = readDocument(documentOverride);\n const selector =\n typeof canvasOrSelector === \"string\" && canvasOrSelector.trim().length > 0\n ? canvasOrSelector\n : DEFAULT_CANVAS_SELECTOR;\n const resolved = doc.querySelector(selector);\n if (!resolved) {\n throw new Error(`Unable to find canvas for selector \"${selector}\".`);\n }\n return resolved;\n}\n\nfunction readGpu(navigatorOverride) {\n const currentNavigator = readNavigator(navigatorOverride);\n const gpu = currentNavigator.gpu;\n if (!gpu || typeof gpu.requestAdapter !== \"function\") {\n throw new Error(\"WebGPU runtime unavailable. navigator.gpu is missing.\");\n }\n return gpu;\n}\n\nfunction configureContext(context, device, format, alphaMode) {\n if (typeof context.configure !== \"function\") {\n throw new Error(\"Canvas WebGPU context does not support configure().\");\n }\n context.configure({\n device,\n format,\n alphaMode,\n });\n}\n\nfunction createRenderPassDescriptor(view, clearColor) {\n return {\n colorAttachments: [\n {\n view,\n loadOp: \"clear\",\n clearValue: {\n r: clearColor[0],\n g: clearColor[1],\n b: clearColor[2],\n a: clearColor[3],\n },\n storeOp: \"store\",\n },\n ],\n };\n}\n\nexport function supportsWebGpu(options = {}) {\n try {\n const gpu = readGpu(options.navigator);\n return Boolean(gpu);\n } catch {\n return false;\n }\n}\n\nexport async function createGpuRenderer(options = {}) {\n const {\n canvas,\n navigator: navigatorOverride,\n document: documentOverride,\n powerPreference = \"high-performance\",\n alpha = true,\n format,\n clearColor = DEFAULT_CLEAR_COLOR,\n requestAnimationFrame = globalThis.requestAnimationFrame?.bind(globalThis),\n cancelAnimationFrame = globalThis.cancelAnimationFrame?.bind(globalThis),\n frameIdFactory,\n onFrameStart,\n onBeforeEncode,\n onAfterSubmit,\n onFrameComplete,\n } = options;\n\n const gpu = readGpu(navigatorOverride);\n const adapter = await gpu.requestAdapter({ powerPreference });\n if (!adapter) {\n throw new Error(\"Unable to obtain GPU adapter.\");\n }\n\n const device = await adapter.requestDevice();\n const targetCanvas = resolveCanvas(canvas, documentOverride);\n const context = targetCanvas.getContext?.(\"webgpu\");\n if (!context) {\n throw new Error(\"Unable to obtain WebGPU canvas context.\");\n }\n\n const resolvedFormat =\n format ||\n (typeof gpu.getPreferredCanvasFormat === \"function\"\n ? gpu.getPreferredCanvasFormat()\n : \"bgra8unorm\");\n\n configureContext(context, device, resolvedFormat, alpha ? \"premultiplied\" : \"opaque\");\n\n let running = false;\n let destroyed = false;\n let frame = 0;\n let lastTimestamp = 0;\n let rafId = null;\n let clear = normalizeColor(clearColor);\n let xrActive = false;\n let detachXrBinding = null;\n\n const renderOnce = (timestamp = now()) => {\n if (destroyed) {\n throw new Error(\"Renderer was destroyed.\");\n }\n\n const frameNumber = frame + 1;\n const frameId = normalizeFrameId(\n typeof frameIdFactory === \"function\"\n ? frameIdFactory({\n frame: frameNumber,\n timestamp,\n canvas: targetCanvas,\n xrActive,\n })\n : `renderer.frame.${frameNumber}`\n );\n const frameTimeMs =\n lastTimestamp > 0 ? Math.max(0, timestamp - lastTimestamp) : undefined;\n\n if (typeof onFrameStart === \"function\") {\n onFrameStart({\n frame: frameNumber,\n frameId,\n frameTimeMs,\n timestamp,\n device,\n context,\n canvas: targetCanvas,\n xrActive,\n });\n }\n\n const texture = context.getCurrentTexture?.();\n if (!texture || typeof texture.createView !== \"function\") {\n throw new Error(\"WebGPU context returned an invalid current texture.\");\n }\n\n const encoder = device.createCommandEncoder({\n label: `plasius.gpu-renderer.frame.${frame}`,\n });\n const view = texture.createView();\n\n const pass = encoder.beginRenderPass(createRenderPassDescriptor(view, clear));\n\n if (typeof onBeforeEncode === \"function\") {\n onBeforeEncode({\n frame,\n frameNumber,\n frameId,\n frameTimeMs,\n timestamp,\n device,\n context,\n encoder,\n pass,\n canvas: targetCanvas,\n xrActive,\n });\n }\n\n if (typeof pass.end === \"function\") {\n pass.end();\n }\n\n const commandBuffer = encoder.finish();\n device.queue.submit([commandBuffer]);\n\n frame = frameNumber;\n lastTimestamp = timestamp;\n\n if (typeof onAfterSubmit === \"function\") {\n onAfterSubmit({\n frame: frameNumber,\n frameNumber,\n frameId,\n frameTimeMs,\n timestamp,\n device,\n context,\n canvas: targetCanvas,\n xrActive,\n });\n }\n\n if (typeof onFrameComplete === \"function\") {\n onFrameComplete({\n frame: frameNumber,\n frameId,\n frameTimeMs,\n timestamp,\n device,\n context,\n canvas: targetCanvas,\n xrActive,\n });\n }\n\n return {\n frame: frameNumber,\n frameId,\n frameTimeMs,\n timestamp,\n };\n };\n\n const tick = (timestamp) => {\n if (!running || destroyed) {\n return;\n }\n renderOnce(timestamp);\n if (typeof requestAnimationFrame === \"function\") {\n rafId = requestAnimationFrame(tick);\n }\n };\n\n const start = () => {\n if (destroyed) {\n throw new Error(\"Renderer was destroyed.\");\n }\n if (running) {\n return false;\n }\n running = true;\n if (typeof requestAnimationFrame === \"function\") {\n rafId = requestAnimationFrame(tick);\n } else {\n renderOnce();\n }\n return true;\n };\n\n const stop = () => {\n if (!running) {\n return false;\n }\n running = false;\n if (rafId !== null && typeof cancelAnimationFrame === \"function\") {\n cancelAnimationFrame(rafId);\n }\n rafId = null;\n return true;\n };\n\n const resize = (cssWidth, cssHeight, devicePixelRatio = globalThis.devicePixelRatio ?? 1) => {\n const width = Math.max(1, Math.floor(cssWidth * devicePixelRatio));\n const height = Math.max(1, Math.floor(cssHeight * devicePixelRatio));\n targetCanvas.width = width;\n targetCanvas.height = height;\n if (targetCanvas.style) {\n targetCanvas.style.width = `${Math.max(1, Math.floor(cssWidth))}px`;\n targetCanvas.style.height = `${Math.max(1, Math.floor(cssHeight))}px`;\n }\n return { width, height };\n };\n\n const setClearColor = (value) => {\n clear = normalizeColor(value);\n return [...clear];\n };\n\n const setXrActive = (active) => {\n xrActive = Boolean(active);\n };\n\n const getSnapshot = () => {\n const width = Number(targetCanvas.width) || 0;\n const height = Number(targetCanvas.height) || 0;\n return {\n running,\n frame,\n lastTimestamp,\n format: resolvedFormat,\n width,\n height,\n xrActive,\n };\n };\n\n const renderer = {\n canvas: targetCanvas,\n context,\n device,\n format: resolvedFormat,\n renderOnce,\n start,\n stop,\n resize,\n setClearColor,\n setXrActive,\n getSnapshot,\n bindXrManager(xrManager, bindOptions = {}) {\n if (detachXrBinding) {\n detachXrBinding();\n }\n detachXrBinding = bindRendererToXrManager(renderer, xrManager, bindOptions);\n return detachXrBinding;\n },\n destroy() {\n stop();\n destroyed = true;\n if (detachXrBinding) {\n detachXrBinding();\n detachXrBinding = null;\n }\n if (typeof context.unconfigure === \"function\") {\n context.unconfigure();\n }\n },\n };\n\n return renderer;\n}\n\nfunction snapshotFromXrManager(xrManager) {\n if (xrManager && typeof xrManager.getState === \"function\") {\n return xrManager.getState();\n }\n if (xrManager?.store && typeof xrManager.store.getSnapshot === \"function\") {\n return xrManager.store.getSnapshot();\n }\n return null;\n}\n\nexport function bindRendererToXrManager(renderer, xrManager, options = {}) {\n if (!xrManager || typeof xrManager.subscribe !== \"function\") {\n throw new Error(\"XR manager must expose subscribe(listener). Use @plasius/gpu-xr createXrManager().\");\n }\n\n const { onSessionStart, onSessionEnd } = options;\n let previousSession = null;\n\n const applyState = (state) => {\n const session = state?.activeSession ?? null;\n if (session === previousSession) {\n return;\n }\n\n previousSession = session;\n\n if (typeof renderer.setXrActive === \"function\") {\n renderer.setXrActive(Boolean(session));\n }\n\n if (session && typeof onSessionStart === \"function\") {\n onSessionStart(session, renderer);\n }\n\n if (!session && typeof onSessionEnd === \"function\") {\n onSessionEnd(renderer);\n }\n };\n\n applyState(snapshotFromXrManager(xrManager));\n return xrManager.subscribe(applyState);\n}\n\nexport const defaultRendererClearColor = DEFAULT_CLEAR_COLOR;\n"],"mappings":"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","names":[]}
|