@quake2ts/test-utils 0.0.750 → 0.0.751
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/index.cjs +38 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +38 -12
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
- package/src/engine/helpers/webgpu-rendering.ts +48 -12
package/dist/index.d.cts
CHANGED
|
@@ -1671,6 +1671,8 @@ interface RenderTestSetup {
|
|
|
1671
1671
|
context: WebGPUContextState;
|
|
1672
1672
|
renderTarget: GPUTexture;
|
|
1673
1673
|
renderTargetView: GPUTextureView;
|
|
1674
|
+
depthTarget?: GPUTexture;
|
|
1675
|
+
depthTargetView?: GPUTextureView;
|
|
1674
1676
|
commandEncoder: GPUCommandEncoder;
|
|
1675
1677
|
cleanup: () => Promise<void>;
|
|
1676
1678
|
width: number;
|
|
@@ -1680,7 +1682,9 @@ interface RenderTestSetup {
|
|
|
1680
1682
|
* Creates a setup for testing rendering pipelines.
|
|
1681
1683
|
* Initializes a headless WebGPU context, a render target texture, and a command encoder.
|
|
1682
1684
|
*/
|
|
1683
|
-
declare function createRenderTestSetup(width?: number, height?: number
|
|
1685
|
+
declare function createRenderTestSetup(width?: number, height?: number, options?: {
|
|
1686
|
+
depth?: boolean;
|
|
1687
|
+
}): Promise<RenderTestSetup>;
|
|
1684
1688
|
/**
|
|
1685
1689
|
* Captures texture content to Uint8ClampedArray (RGBA).
|
|
1686
1690
|
* Creates its own CommandEncoder and submits immediately.
|
package/dist/index.d.ts
CHANGED
|
@@ -1671,6 +1671,8 @@ interface RenderTestSetup {
|
|
|
1671
1671
|
context: WebGPUContextState;
|
|
1672
1672
|
renderTarget: GPUTexture;
|
|
1673
1673
|
renderTargetView: GPUTextureView;
|
|
1674
|
+
depthTarget?: GPUTexture;
|
|
1675
|
+
depthTargetView?: GPUTextureView;
|
|
1674
1676
|
commandEncoder: GPUCommandEncoder;
|
|
1675
1677
|
cleanup: () => Promise<void>;
|
|
1676
1678
|
width: number;
|
|
@@ -1680,7 +1682,9 @@ interface RenderTestSetup {
|
|
|
1680
1682
|
* Creates a setup for testing rendering pipelines.
|
|
1681
1683
|
* Initializes a headless WebGPU context, a render target texture, and a command encoder.
|
|
1682
1684
|
*/
|
|
1683
|
-
declare function createRenderTestSetup(width?: number, height?: number
|
|
1685
|
+
declare function createRenderTestSetup(width?: number, height?: number, options?: {
|
|
1686
|
+
depth?: boolean;
|
|
1687
|
+
}): Promise<RenderTestSetup>;
|
|
1684
1688
|
/**
|
|
1685
1689
|
* Captures texture content to Uint8ClampedArray (RGBA).
|
|
1686
1690
|
* Creates its own CommandEncoder and submits immediately.
|
package/dist/index.js
CHANGED
|
@@ -3794,7 +3794,7 @@ function captureAudioEvents(context) {
|
|
|
3794
3794
|
}
|
|
3795
3795
|
|
|
3796
3796
|
// src/engine/helpers/webgpu-rendering.ts
|
|
3797
|
-
async function createRenderTestSetup(width = 256, height = 256) {
|
|
3797
|
+
async function createRenderTestSetup(width = 256, height = 256, options = {}) {
|
|
3798
3798
|
const setup = await initHeadlessWebGPU();
|
|
3799
3799
|
const { device } = setup;
|
|
3800
3800
|
const renderTarget = device.createTexture({
|
|
@@ -3803,6 +3803,16 @@ async function createRenderTestSetup(width = 256, height = 256) {
|
|
|
3803
3803
|
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC
|
|
3804
3804
|
});
|
|
3805
3805
|
const renderTargetView = renderTarget.createView();
|
|
3806
|
+
let depthTarget;
|
|
3807
|
+
let depthTargetView;
|
|
3808
|
+
if (options.depth) {
|
|
3809
|
+
depthTarget = device.createTexture({
|
|
3810
|
+
size: { width, height, depthOrArrayLayers: 1 },
|
|
3811
|
+
format: "depth24plus",
|
|
3812
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT
|
|
3813
|
+
});
|
|
3814
|
+
depthTargetView = depthTarget.createView();
|
|
3815
|
+
}
|
|
3806
3816
|
const commandEncoder = device.createCommandEncoder();
|
|
3807
3817
|
const context = {
|
|
3808
3818
|
adapter: setup.adapter,
|
|
@@ -3814,11 +3824,14 @@ async function createRenderTestSetup(width = 256, height = 256) {
|
|
|
3814
3824
|
context,
|
|
3815
3825
|
renderTarget,
|
|
3816
3826
|
renderTargetView,
|
|
3827
|
+
depthTarget,
|
|
3828
|
+
depthTargetView,
|
|
3817
3829
|
commandEncoder,
|
|
3818
3830
|
width,
|
|
3819
3831
|
height,
|
|
3820
3832
|
cleanup: async () => {
|
|
3821
3833
|
renderTarget.destroy();
|
|
3834
|
+
depthTarget?.destroy();
|
|
3822
3835
|
await setup.cleanup();
|
|
3823
3836
|
}
|
|
3824
3837
|
};
|
|
@@ -3867,20 +3880,33 @@ async function captureTexture(device, texture, width, height) {
|
|
|
3867
3880
|
}
|
|
3868
3881
|
async function renderAndCapture(setup, renderFn) {
|
|
3869
3882
|
const { device, queue } = setup.context;
|
|
3870
|
-
const { renderTargetView, commandEncoder, width, height } = setup;
|
|
3871
|
-
const
|
|
3872
|
-
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
3879
|
-
|
|
3880
|
-
|
|
3883
|
+
const { renderTargetView, commandEncoder, width, height, depthTargetView } = setup;
|
|
3884
|
+
const colorAttachment = {
|
|
3885
|
+
view: renderTargetView,
|
|
3886
|
+
clearValue: { r: 0, g: 0, b: 0, a: 0 },
|
|
3887
|
+
loadOp: "clear",
|
|
3888
|
+
storeOp: "store"
|
|
3889
|
+
};
|
|
3890
|
+
const descriptor = {
|
|
3891
|
+
colorAttachments: [colorAttachment]
|
|
3892
|
+
};
|
|
3893
|
+
if (depthTargetView) {
|
|
3894
|
+
descriptor.depthStencilAttachment = {
|
|
3895
|
+
view: depthTargetView,
|
|
3896
|
+
depthClearValue: 1,
|
|
3897
|
+
depthLoadOp: "clear",
|
|
3898
|
+
depthStoreOp: "discard"
|
|
3899
|
+
};
|
|
3900
|
+
}
|
|
3901
|
+
device.pushErrorScope("validation");
|
|
3902
|
+
const passEncoder = commandEncoder.beginRenderPass(descriptor);
|
|
3881
3903
|
renderFn(passEncoder);
|
|
3882
3904
|
passEncoder.end();
|
|
3883
3905
|
queue.submit([commandEncoder.finish()]);
|
|
3906
|
+
const error = await device.popErrorScope();
|
|
3907
|
+
if (error) {
|
|
3908
|
+
throw new Error(`WebGPU validation error: ${error.message}`);
|
|
3909
|
+
}
|
|
3884
3910
|
return captureTexture(device, setup.renderTarget, width, height);
|
|
3885
3911
|
}
|
|
3886
3912
|
async function createComputeTestSetup(outputSize) {
|