@plasius/gpu-renderer 0.1.15 → 0.2.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plasius/gpu-renderer",
3
- "version": "0.1.15",
3
+ "version": "0.2.1",
4
4
  "description": "Framework-agnostic WebGPU renderer runtime for Plasius projects.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -49,6 +49,7 @@
49
49
  "author": "Plasius LTD <development@plasius.co.uk>",
50
50
  "license": "Apache-2.0",
51
51
  "dependencies": {
52
+ "@plasius/gpu-shared": "^0.1.11",
52
53
  "@plasius/gpu-xr": "^0.1.11"
53
54
  },
54
55
  "devDependencies": {
package/src/index.d.ts CHANGED
@@ -162,6 +162,69 @@ export interface WavefrontMeshAcceleration {
162
162
  readonly triangles: readonly WavefrontTriangleRecord[];
163
163
  }
164
164
 
165
+ export interface WavefrontReferenceRay {
166
+ readonly rayId: number;
167
+ readonly parentRayId: number;
168
+ readonly sourcePixelId: number;
169
+ readonly sampleId: number;
170
+ readonly bounce: number;
171
+ readonly mediumRefId: number;
172
+ readonly flags: number;
173
+ readonly origin: readonly [number, number, number] | readonly number[];
174
+ readonly direction: readonly [number, number, number] | readonly number[];
175
+ readonly throughput: readonly [number, number, number, number] | readonly number[];
176
+ readonly pixelX: number;
177
+ readonly pixelY: number;
178
+ }
179
+
180
+ export interface WavefrontReferenceTile {
181
+ readonly x?: number;
182
+ readonly y?: number;
183
+ readonly width?: number;
184
+ readonly height?: number;
185
+ }
186
+
187
+ export interface CreateWavefrontReferenceRayOptions {
188
+ readonly tile?: WavefrontReferenceTile;
189
+ readonly pixelIndex?: number;
190
+ readonly sampleIndex?: number;
191
+ readonly frameIndex?: number;
192
+ readonly jitterScale?: number;
193
+ }
194
+
195
+ export interface WavefrontReferenceHit {
196
+ readonly hitType: "surface" | "environment";
197
+ readonly rayId: number;
198
+ readonly sourcePixelId: number;
199
+ readonly distance: number;
200
+ readonly entityId: number;
201
+ readonly instanceId: number;
202
+ readonly primitiveId: number;
203
+ readonly materialId: number;
204
+ readonly materialRefId: number;
205
+ readonly mediumRefId: number;
206
+ readonly barycentrics: readonly [number, number, number] | readonly number[];
207
+ readonly uv: readonly [number, number] | readonly number[];
208
+ readonly geometricNormal: readonly [number, number, number] | readonly number[];
209
+ readonly shadingNormal: readonly [number, number, number] | readonly number[];
210
+ readonly frontFace: boolean;
211
+ readonly triangleIndex: number;
212
+ readonly triangleId: number;
213
+ readonly position: readonly [number, number, number] | readonly number[];
214
+ readonly color: readonly number[];
215
+ readonly emission: readonly number[];
216
+ readonly material: readonly number[];
217
+ }
218
+
219
+ export interface IntersectWavefrontReferenceTriangleOptions {
220
+ readonly maxDistance?: number;
221
+ readonly triangleIndex?: number;
222
+ }
223
+
224
+ export interface TraceWavefrontReferenceTrianglesOptions {
225
+ readonly maxDistance?: number;
226
+ }
227
+
165
228
  export type WavefrontAccelerationBuildMode = "gpu" | "cpu-debug";
166
229
 
167
230
  export interface WavefrontGpuMeshSource {
@@ -246,6 +309,7 @@ export interface WavefrontEnvironmentPortalRecord {
246
309
  }
247
310
 
248
311
  export interface WavefrontPathTracingComputeConfig {
312
+ readonly mode: typeof rendererWavefrontComputeMode;
249
313
  readonly width: number;
250
314
  readonly height: number;
251
315
  readonly maxDepth: number;
@@ -331,6 +395,7 @@ export interface WavefrontPathTracingMemoryEstimate {
331
395
  readonly environmentPortalBytes: number;
332
396
  readonly configBytes: number;
333
397
  readonly counterBytes: number;
398
+ readonly indirectDispatchBytes: number;
334
399
  readonly totalHotBufferBytes: number;
335
400
  }
336
401
 
@@ -378,32 +443,12 @@ export interface WavefrontPathTracingComputeRenderer {
378
443
  readonly device: GPUDevice;
379
444
  readonly format: GPUTextureFormat | string;
380
445
  readonly config: WavefrontPathTracingComputeConfig;
381
- renderOnce(): Readonly<{
382
- frame: number;
383
- width: number;
384
- height: number;
385
- maxDepth: number;
386
- tiles: number;
387
- tileSize: number;
388
- samplesPerPixel: number;
389
- screenRays: number;
390
- primaryRays: number;
391
- sceneObjectCount: number;
392
- triangleCount: number;
393
- emissiveTriangleCount: number;
394
- environmentPortalCount: number;
395
- environmentPortalMode: 0 | 1 | 2;
396
- bvhNodeCount: number;
397
- displayQuality: boolean;
398
- accelerationBuildMode: WavefrontAccelerationBuildMode;
399
- gpuAccelerationBuildRequired: boolean;
400
- accelerationBuildSubmitted: boolean;
401
- accelerationBuilt: boolean;
402
- accelerationBuildCount: number;
403
- commandSubmissions: number;
404
- frameConfigSlots: number;
405
- memory: WavefrontPathTracingMemoryEstimate;
406
- }>;
446
+ renderOnce(): WavefrontPathTracingComputeFrameStats;
447
+ renderFrame(options?: {
448
+ readStats?: boolean;
449
+ readOutputProbe?: boolean;
450
+ probe?: { x?: number; y?: number };
451
+ }): Promise<WavefrontPathTracingComputeFrameStats>;
407
452
  readOutputProbe(options?: { x?: number; y?: number }): Promise<
408
453
  Readonly<{
409
454
  x: number;
@@ -438,6 +483,50 @@ export interface WavefrontPathTracingComputeRenderer {
438
483
  destroy(): void;
439
484
  }
440
485
 
486
+ export interface WavefrontPathTracingComputeFrameStats {
487
+ readonly frame: number;
488
+ readonly width: number;
489
+ readonly height: number;
490
+ readonly maxDepth: number;
491
+ readonly tiles: number;
492
+ readonly tileSize: number;
493
+ readonly samplesPerPixel: number;
494
+ readonly screenRays: number;
495
+ readonly primaryRays: number;
496
+ readonly sceneObjectCount: number;
497
+ readonly triangleCount: number;
498
+ readonly emissiveTriangleCount: number;
499
+ readonly environmentPortalCount: number;
500
+ readonly environmentPortalMode: 0 | 1 | 2;
501
+ readonly bvhNodeCount: number;
502
+ readonly displayQuality: boolean;
503
+ readonly accelerationBuildMode: WavefrontAccelerationBuildMode;
504
+ readonly gpuAccelerationBuildRequired: boolean;
505
+ readonly accelerationBuildSubmitted: boolean;
506
+ readonly accelerationBuilt: boolean;
507
+ readonly accelerationBuildCount: number;
508
+ readonly commandSubmissions: number;
509
+ readonly frameConfigSlots: number;
510
+ readonly memory: WavefrontPathTracingMemoryEstimate;
511
+ readonly outputProbe?: Readonly<{
512
+ x: number;
513
+ y: number;
514
+ rgba: readonly number[];
515
+ luminance: number;
516
+ sampledPixels: number;
517
+ nonZeroSamples: number;
518
+ maxChannel: number;
519
+ }> | null;
520
+ readonly bounces?: readonly unknown[];
521
+ readonly termination?: Readonly<{
522
+ emissive: number;
523
+ environment: number;
524
+ ambientFallback: number;
525
+ maxDepth: number;
526
+ }>;
527
+ readonly queueOverflow?: number;
528
+ }
529
+
441
530
  export function normalizeWavefrontSceneObject(
442
531
  input?: WavefrontSceneObjectInput,
443
532
  index?: number
@@ -490,6 +579,21 @@ export function createWavefrontBvhSortStages(
490
579
  export function createWavefrontPathTracingComputeConfig(
491
580
  options?: CreateWavefrontPathTracingComputeRendererOptions
492
581
  ): WavefrontPathTracingComputeConfig;
582
+ export function createWavefrontReferenceRay(
583
+ config: WavefrontPathTracingComputeConfig,
584
+ options?: CreateWavefrontReferenceRayOptions
585
+ ): WavefrontReferenceRay;
586
+ export function intersectWavefrontReferenceTriangle(
587
+ ray: WavefrontReferenceRay,
588
+ triangle: WavefrontTriangleRecord,
589
+ options?: IntersectWavefrontReferenceTriangleOptions
590
+ ): WavefrontReferenceHit | null;
591
+ export function traceWavefrontReferenceTriangles(
592
+ config: WavefrontPathTracingComputeConfig,
593
+ ray: WavefrontReferenceRay,
594
+ triangles: readonly WavefrontTriangleRecord[],
595
+ options?: TraceWavefrontReferenceTrianglesOptions
596
+ ): WavefrontReferenceHit;
493
597
  export function packWavefrontSceneObjects(
494
598
  sceneObjects: readonly WavefrontSceneObjectInput[],
495
599
  capacity?: number
@@ -523,6 +627,20 @@ export function supportsWavefrontPathTracingCompute(options?: {
523
627
  export function createWavefrontPathTracingComputeRenderer(
524
628
  options?: CreateWavefrontPathTracingComputeRendererOptions
525
629
  ): Promise<WavefrontPathTracingComputeRenderer>;
630
+ export function renderWavefrontPathTracingComputeFrame(
631
+ options?: CreateWavefrontPathTracingComputeRendererOptions & {
632
+ readStats?: boolean;
633
+ readOutputProbe?: boolean;
634
+ }
635
+ ): Promise<WavefrontPathTracingComputeFrameStats>;
636
+ export function createWavefrontPathTracingComputeShaderSource(options?: {
637
+ workgroupSize?: number;
638
+ outputTextureFormat?: GPUTextureFormat | "rgba8unorm";
639
+ }): string;
640
+
641
+ export const rendererWavefrontComputeMode: "webgpu-compute";
642
+ export const rendererWavefrontComputeWorkgroupSize: 64;
643
+ export const rendererWavefrontComputeStatsStride: 8;
526
644
 
527
645
  export const wavefrontPathTracingComputeLimits: Readonly<{
528
646
  workgroupSize: 64;
@@ -538,6 +656,8 @@ export const wavefrontPathTracingComputeLimits: Readonly<{
538
656
  emissiveTriangleMetadataRecordBytes: 48;
539
657
  environmentPortalRecordBytes: 96;
540
658
  accumulationRecordBytes: 16;
659
+ counterRecordBytes: 32;
660
+ indirectDispatchRecordBytes: 12;
541
661
  }>;
542
662
  export const wavefrontSceneObjectKinds: Readonly<{
543
663
  sphere: 1;
package/src/index.js CHANGED
@@ -9,13 +9,21 @@ export {
9
9
  createWavefrontMeshAcceleration,
10
10
  createWavefrontPathTracingComputeConfig,
11
11
  createWavefrontPathTracingComputeRenderer,
12
+ createWavefrontPathTracingComputeShaderSource,
13
+ createWavefrontReferenceRay,
12
14
  estimateWavefrontPathTracingMemory,
15
+ intersectWavefrontReferenceTriangle,
13
16
  normalizeWavefrontMesh,
14
17
  normalizeWavefrontSceneObject,
15
18
  packWavefrontBvhNodes,
16
19
  packWavefrontSceneObjects,
17
20
  packWavefrontTriangles,
21
+ renderWavefrontPathTracingComputeFrame,
22
+ rendererWavefrontComputeMode,
23
+ rendererWavefrontComputeStatsStride,
24
+ rendererWavefrontComputeWorkgroupSize,
18
25
  supportsWavefrontPathTracingCompute,
26
+ traceWavefrontReferenceTriangles,
19
27
  wavefrontMaterialKinds,
20
28
  wavefrontPathTracingComputeLimits,
21
29
  wavefrontSceneObjectKinds,