@forgeax/engine-rhi-webgpu 0.1.23 → 0.1.24
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/dist/device.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +30 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/rhi-webgpu.unit.test.ts +71 -0
- package/src/device.ts +4 -0
- package/src/index.ts +44 -3
package/dist/device.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAwBV,gBAAgB,EAIhB,SAAS,EAcV,MAAM,qBAAqB,CAAC;AAqM7B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAE/E;AA6qCD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG;IACnD,MAAM,EAAE,SAAS,CAAC;IAClB;6CACyC;IACzC,GAAG,EAAE,SAAS,CAAC;CAChB,
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAwBV,gBAAgB,EAIhB,SAAS,EAcV,MAAM,qBAAqB,CAAC;AAqM7B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAE/E;AA6qCD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG;IACnD,MAAM,EAAE,SAAS,CAAC;IAClB;6CACyC;IACzC,GAAG,EAAE,SAAS,CAAC;CAChB,CA+bA;AA0BD;;iFAEiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,aAAa,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACvD,WAAW,IAAI,IAAI,CAAC;IACpB,gBAAgB,IAAI,sBAAsB,GAAG,IAAI,CAAC;IAClD,iBAAiB,IAAI,UAAU,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,oBAAoB,GAAG,gBAAgB,CAqGpF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,8 +13,9 @@ import type { RequestAdapterOptions, Result, RhiAdapter, RhiCanvasContext, RhiDe
|
|
|
13
13
|
export interface GpuLike {
|
|
14
14
|
requestAdapter(options?: GPURequestAdapterOptions | undefined): Promise<GpuAdapterLike | null>;
|
|
15
15
|
}
|
|
16
|
-
/** The `GPUAdapter` subset accepted at the provider seam —
|
|
16
|
+
/** The `GPUAdapter` subset accepted at the provider seam — capability limits plus `requestDevice`. */
|
|
17
17
|
export interface GpuAdapterLike {
|
|
18
|
+
readonly limits?: GPUSupportedLimits | undefined;
|
|
18
19
|
requestDevice(descriptor?: GPUDeviceDescriptor | undefined): Promise<GpuDeviceLike>;
|
|
19
20
|
}
|
|
20
21
|
/**
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAEV,qBAAqB,EACrB,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,EACb,MAAM,qBAAqB,CAAC;AAW7B;;;;;;;;;;GAUG;AACH,MAAM,WAAW,OAAO;IAEtB,cAAc,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,SAAS,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CAChG;AAED,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAEV,qBAAqB,EACrB,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,EACb,MAAM,qBAAqB,CAAC;AAW7B;;;;;;;;;;GAUG;AACH,MAAM,WAAW,OAAO;IAEtB,cAAc,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,SAAS,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CAChG;AAED,sGAAsG;AACtG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAEjD,aAAa,CAAC,UAAU,CAAC,EAAE,mBAAmB,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACrF;AAwCD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAEpC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC;IACvD,aAAa,CAAC,UAAU,EAAE,oBAAoB,GAAG,OAAO,CAAC;IACzD,aAAa,CAAC,UAAU,CAAC,EAAE,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAAC;IACtE,qBAAqB,CAAC,UAAU,EAAE,4BAA4B,GAAG,OAAO,CAAC;IACzE,eAAe,CAAC,UAAU,EAAE,sBAAsB,GAAG,OAAO,CAAC;IAC7D,oBAAoB,CAAC,UAAU,EAAE,2BAA2B,GAAG,OAAO,CAAC;IACvE,oBAAoB,CAAC,UAAU,EAAE,2BAA2B,GAAG,OAAO,CAAC;IACvE,kBAAkB,CAAC,UAAU,EAAE,yBAAyB,GAAG,OAAO,CAAC;CACpE;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACtD,gBAAgB,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;CACpD;AA2BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,aAAa,CACjC,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CA2BtC;AA6CD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAkDzC;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAGhC;AA+DD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,cAAc,CAClC,IAAI,CAAC,EAAE,qBAAqB,GAAG,SAAS,EACxC,kBAAkB,CAAC,EAAE,iBAAiB,GAAG,eAAe,GAAG,SAAS,GACnE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAgCvC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,GAAG,eAAe,GAC1C,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAiBpC;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,GAAG,EAAE,WAAW,GAAG;IAC9B,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,2BAA2B,EAAE,OAAO,2BAA2B,CAAC;IAChE,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;CAMnD,CAAC;AAQF,YAAY,EAGV,SAAS,EAGT,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EACzB,MAAM,EACN,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,eAAe,EACf,yBAAyB,EACzB,KAAK,EACL,cAAc,EACd,wBAAwB,EACxB,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,gCAAgC,EAChC,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,IAAI,uBAAuB,EAE/C,MAAM,EACN,SAAS,EACT,QAAQ,EAER,UAAU,EACV,2BAA2B,EAC3B,gBAAgB,EAChB,OAAO,EAEP,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,EACT,QAAQ,EACR,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,sBAAsB,EACtB,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,iBAAiB,EACjB,WAAW,EACX,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAkBzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAWlD,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC"}
|
package/dist/index.mjs
CHANGED
|
@@ -1175,6 +1175,10 @@ function makeRhiDevice(rawDevice) {
|
|
|
1175
1175
|
return probe;
|
|
1176
1176
|
},
|
|
1177
1177
|
queue,
|
|
1178
|
+
// The raw backend owns the only real loss-injection seam. Keep this
|
|
1179
|
+
// Promise as a transparent observation boundary; a test provider must
|
|
1180
|
+
// operate on the backend before this shim and must never be added to the
|
|
1181
|
+
// public RHI surface.
|
|
1178
1182
|
lost: rawDevice.lost,
|
|
1179
1183
|
createBuffer(desc) {
|
|
1180
1184
|
const out = rawDevice.createBuffer(
|
|
@@ -1710,6 +1714,28 @@ function translateErrorEventToRhiError(event) {
|
|
|
1710
1714
|
}
|
|
1711
1715
|
|
|
1712
1716
|
// src/index.ts
|
|
1717
|
+
var DYNAMIC_DEVICE_LIMIT_KEYS = [
|
|
1718
|
+
"maxDynamicUniformBuffersPerPipelineLayout",
|
|
1719
|
+
"maxDynamicStorageBuffersPerPipelineLayout"
|
|
1720
|
+
];
|
|
1721
|
+
var SYNTHETIC_DAWN_DYNAMIC_LIMIT_DEFAULT = 1e6;
|
|
1722
|
+
function normalizeDeviceDescriptor(adapter, descriptor) {
|
|
1723
|
+
const adapterLimits = adapter.limits;
|
|
1724
|
+
if (adapterLimits === void 0 || adapterLimits === null) return descriptor;
|
|
1725
|
+
const requiredLimits = { ...descriptor?.requiredLimits ?? {} };
|
|
1726
|
+
let changed = false;
|
|
1727
|
+
for (const key of DYNAMIC_DEVICE_LIMIT_KEYS) {
|
|
1728
|
+
const value = adapterLimits[key];
|
|
1729
|
+
if (!Number.isFinite(value) || value < 1) continue;
|
|
1730
|
+
const requested = requiredLimits[key];
|
|
1731
|
+
if (requested !== void 0 && (requested <= value || requested !== SYNTHETIC_DAWN_DYNAMIC_LIMIT_DEFAULT)) {
|
|
1732
|
+
continue;
|
|
1733
|
+
}
|
|
1734
|
+
requiredLimits[key] = value;
|
|
1735
|
+
changed = true;
|
|
1736
|
+
}
|
|
1737
|
+
return changed ? { ...descriptor ?? {}, requiredLimits } : descriptor;
|
|
1738
|
+
}
|
|
1713
1739
|
function classifyRequestDeviceError(e) {
|
|
1714
1740
|
const msg = e instanceof Error ? e.message : String(e);
|
|
1715
1741
|
if (/feature/i.test(msg)) return featureNotEnabled();
|
|
@@ -1729,7 +1755,9 @@ async function requestDevice(opts = {}) {
|
|
|
1729
1755
|
}
|
|
1730
1756
|
let rawDevice;
|
|
1731
1757
|
try {
|
|
1732
|
-
rawDevice = await adapter.requestDevice(
|
|
1758
|
+
rawDevice = await adapter.requestDevice(
|
|
1759
|
+
normalizeDeviceDescriptor(adapter, opts.deviceDescriptor)
|
|
1760
|
+
);
|
|
1733
1761
|
} catch (e) {
|
|
1734
1762
|
return classifyRequestDeviceError(e);
|
|
1735
1763
|
}
|
|
@@ -1819,7 +1847,7 @@ function makeRhiAdapter(rawAdapter) {
|
|
|
1819
1847
|
let rawDevice;
|
|
1820
1848
|
try {
|
|
1821
1849
|
rawDevice = await rawAdapter.requestDevice(
|
|
1822
|
-
opts
|
|
1850
|
+
normalizeDeviceDescriptor(rawAdapter, opts)
|
|
1823
1851
|
);
|
|
1824
1852
|
} catch (e) {
|
|
1825
1853
|
return classifyRequestDeviceError(e);
|