@forgeax/engine-rhi 0.1.2
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/LICENSE +202 -0
- package/README.md +234 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/__tests__/async-form.test-d.d.ts +2 -0
- package/dist/__tests__/async-form.test-d.d.ts.map +1 -0
- package/dist/__tests__/binding-resource.test-d.d.ts +2 -0
- package/dist/__tests__/binding-resource.test-d.d.ts.map +1 -0
- package/dist/__tests__/buffer-mapping.test-d.d.ts +2 -0
- package/dist/__tests__/buffer-mapping.test-d.d.ts.map +1 -0
- package/dist/__tests__/canvasContext.test-d.d.ts +2 -0
- package/dist/__tests__/canvasContext.test-d.d.ts.map +1 -0
- package/dist/__tests__/caps-three-way.unit.test.d.ts +2 -0
- package/dist/__tests__/caps-three-way.unit.test.d.ts.map +1 -0
- package/dist/__tests__/caps.test-d.d.ts +2 -0
- package/dist/__tests__/caps.test-d.d.ts.map +1 -0
- package/dist/__tests__/command-encoder-spec-alignment.test-d.d.ts +2 -0
- package/dist/__tests__/command-encoder-spec-alignment.test-d.d.ts.map +1 -0
- package/dist/__tests__/createComputePipeline.test-d.d.ts +2 -0
- package/dist/__tests__/createComputePipeline.test-d.d.ts.map +1 -0
- package/dist/__tests__/createQuerySet.test-d.d.ts +2 -0
- package/dist/__tests__/createQuerySet.test-d.d.ts.map +1 -0
- package/dist/__tests__/createTextureView.test-d.d.ts +2 -0
- package/dist/__tests__/createTextureView.test-d.d.ts.map +1 -0
- package/dist/__tests__/descriptor-mirror.test-d.d.ts +2 -0
- package/dist/__tests__/descriptor-mirror.test-d.d.ts.map +1 -0
- package/dist/__tests__/draw-validation-errors.test.d.ts +2 -0
- package/dist/__tests__/draw-validation-errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors-instancing.unit.test.d.ts +2 -0
- package/dist/__tests__/errors-instancing.unit.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test-d.d.ts +2 -0
- package/dist/__tests__/errors.test-d.d.ts.map +1 -0
- package/dist/__tests__/limit-exceeded-detail.test-d.d.ts +2 -0
- package/dist/__tests__/limit-exceeded-detail.test-d.d.ts.map +1 -0
- package/dist/__tests__/mapped-buffer.test-d.d.ts +2 -0
- package/dist/__tests__/mapped-buffer.test-d.d.ts.map +1 -0
- package/dist/__tests__/opaque-handle.test-d.d.ts +2 -0
- package/dist/__tests__/opaque-handle.test-d.d.ts.map +1 -0
- package/dist/__tests__/owner-out-of-range-role.test.d.ts +2 -0
- package/dist/__tests__/owner-out-of-range-role.test.d.ts.map +1 -0
- package/dist/__tests__/queue-writes.test-d.d.ts +2 -0
- package/dist/__tests__/queue-writes.test-d.d.ts.map +1 -0
- package/dist/__tests__/queue-writes.unit.test.d.ts +2 -0
- package/dist/__tests__/queue-writes.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-pass-encoder-spec-alignment.test-d.d.ts +2 -0
- package/dist/__tests__/render-pass-encoder-spec-alignment.test-d.d.ts.map +1 -0
- package/dist/__tests__/requestAdapter.test-d.d.ts +2 -0
- package/dist/__tests__/requestAdapter.test-d.d.ts.map +1 -0
- package/dist/errors.d.ts +315 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.mjs +56 -0
- package/dist/errors.mjs.map +1 -0
- package/dist/index.d.ts +1749 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +256 -0
- package/dist/index.mjs.map +1 -0
- package/dist/queue-writes.d.ts +20 -0
- package/dist/queue-writes.d.ts.map +1 -0
- package/package.json +61 -0
- package/src/__tests__/async-form.test-d.ts +40 -0
- package/src/__tests__/binding-resource.test-d.ts +66 -0
- package/src/__tests__/buffer-mapping.test-d.ts +84 -0
- package/src/__tests__/canvasContext.test-d.ts +106 -0
- package/src/__tests__/caps-three-way.unit.test.ts +144 -0
- package/src/__tests__/caps.test-d.ts +83 -0
- package/src/__tests__/command-encoder-spec-alignment.test-d.ts +117 -0
- package/src/__tests__/createComputePipeline.test-d.ts +149 -0
- package/src/__tests__/createQuerySet.test-d.ts +81 -0
- package/src/__tests__/createTextureView.test-d.ts +127 -0
- package/src/__tests__/descriptor-mirror.test-d.ts +267 -0
- package/src/__tests__/draw-validation-errors.test.ts +155 -0
- package/src/__tests__/errors-instancing.unit.test.ts +167 -0
- package/src/__tests__/errors.test-d.ts +199 -0
- package/src/__tests__/limit-exceeded-detail.test-d.ts +33 -0
- package/src/__tests__/mapped-buffer.test-d.ts +65 -0
- package/src/__tests__/opaque-handle.test-d.ts +121 -0
- package/src/__tests__/owner-out-of-range-role.test.ts +84 -0
- package/src/__tests__/queue-writes.test-d.ts +107 -0
- package/src/__tests__/queue-writes.unit.test.ts +30 -0
- package/src/__tests__/render-pass-encoder-spec-alignment.test-d.ts +202 -0
- package/src/__tests__/requestAdapter.test-d.ts +123 -0
- package/src/errors.ts +504 -0
- package/src/index.ts +2398 -0
- package/src/queue-writes.ts +62 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the source range of a queue.writeBuffer call.
|
|
3
|
+
*
|
|
4
|
+
* WebGPU defines dataOffset and size in elements for typed-array sources, but
|
|
5
|
+
* in bytes for ArrayBuffer and DataView sources. Keeping that conversion in
|
|
6
|
+
* the shared RHI package makes the browser, native, and debug paths agree.
|
|
7
|
+
*/
|
|
8
|
+
export interface BufferWriteRange {
|
|
9
|
+
readonly sourceOffset: number;
|
|
10
|
+
readonly sourceSize: number;
|
|
11
|
+
readonly byteOffset: number;
|
|
12
|
+
readonly byteSize: number;
|
|
13
|
+
readonly bytes: Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function elementSize(data: ArrayBufferView | ArrayBuffer): number {
|
|
17
|
+
if (data instanceof ArrayBuffer) return 1;
|
|
18
|
+
const bytesPerElement = (data as ArrayBufferView & { BYTES_PER_ELEMENT?: number })
|
|
19
|
+
.BYTES_PER_ELEMENT;
|
|
20
|
+
return typeof bytesPerElement === 'number' && bytesPerElement > 0 ? bytesPerElement : 1;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function sourceByteView(data: ArrayBufferView | ArrayBuffer): Uint8Array {
|
|
24
|
+
return data instanceof ArrayBuffer
|
|
25
|
+
? new Uint8Array(data)
|
|
26
|
+
: new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Return the exact source bytes selected by a queue.writeBuffer range.
|
|
31
|
+
* Undefined means the supplied element range is invalid.
|
|
32
|
+
*/
|
|
33
|
+
export function resolveBufferWriteRange(
|
|
34
|
+
data: ArrayBufferView | ArrayBuffer,
|
|
35
|
+
dataOffset?: number,
|
|
36
|
+
size?: number,
|
|
37
|
+
): BufferWriteRange | undefined {
|
|
38
|
+
const bytes = sourceByteView(data);
|
|
39
|
+
const bytesPerElement = elementSize(data);
|
|
40
|
+
const elementCount = bytes.byteLength / bytesPerElement;
|
|
41
|
+
const sourceOffset = dataOffset ?? 0;
|
|
42
|
+
const sourceSize = size ?? elementCount - sourceOffset;
|
|
43
|
+
if (
|
|
44
|
+
!Number.isInteger(sourceOffset) ||
|
|
45
|
+
!Number.isInteger(sourceSize) ||
|
|
46
|
+
sourceOffset < 0 ||
|
|
47
|
+
sourceSize < 0 ||
|
|
48
|
+
sourceOffset > elementCount ||
|
|
49
|
+
sourceSize > elementCount - sourceOffset
|
|
50
|
+
) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
const byteOffset = sourceOffset * bytesPerElement;
|
|
54
|
+
const byteSize = sourceSize * bytesPerElement;
|
|
55
|
+
return {
|
|
56
|
+
sourceOffset,
|
|
57
|
+
sourceSize,
|
|
58
|
+
byteOffset,
|
|
59
|
+
byteSize,
|
|
60
|
+
bytes: bytes.subarray(byteOffset, byteOffset + byteSize),
|
|
61
|
+
};
|
|
62
|
+
}
|