@quake2ts/test-utils 0.0.750 → 0.0.752

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.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): Promise<RenderTestSetup>;
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): Promise<RenderTestSetup>;
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 passEncoder = commandEncoder.beginRenderPass({
3872
- colorAttachments: [
3873
- {
3874
- view: renderTargetView,
3875
- clearValue: { r: 0, g: 0, b: 0, a: 0 },
3876
- loadOp: "clear",
3877
- storeOp: "store"
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) {