@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.cjs CHANGED
@@ -4064,7 +4064,7 @@ function captureAudioEvents(context) {
4064
4064
  }
4065
4065
 
4066
4066
  // src/engine/helpers/webgpu-rendering.ts
4067
- async function createRenderTestSetup(width = 256, height = 256) {
4067
+ async function createRenderTestSetup(width = 256, height = 256, options = {}) {
4068
4068
  const setup = await initHeadlessWebGPU();
4069
4069
  const { device } = setup;
4070
4070
  const renderTarget = device.createTexture({
@@ -4073,6 +4073,16 @@ async function createRenderTestSetup(width = 256, height = 256) {
4073
4073
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC
4074
4074
  });
4075
4075
  const renderTargetView = renderTarget.createView();
4076
+ let depthTarget;
4077
+ let depthTargetView;
4078
+ if (options.depth) {
4079
+ depthTarget = device.createTexture({
4080
+ size: { width, height, depthOrArrayLayers: 1 },
4081
+ format: "depth24plus",
4082
+ usage: GPUTextureUsage.RENDER_ATTACHMENT
4083
+ });
4084
+ depthTargetView = depthTarget.createView();
4085
+ }
4076
4086
  const commandEncoder = device.createCommandEncoder();
4077
4087
  const context = {
4078
4088
  adapter: setup.adapter,
@@ -4084,11 +4094,14 @@ async function createRenderTestSetup(width = 256, height = 256) {
4084
4094
  context,
4085
4095
  renderTarget,
4086
4096
  renderTargetView,
4097
+ depthTarget,
4098
+ depthTargetView,
4087
4099
  commandEncoder,
4088
4100
  width,
4089
4101
  height,
4090
4102
  cleanup: async () => {
4091
4103
  renderTarget.destroy();
4104
+ depthTarget?.destroy();
4092
4105
  await setup.cleanup();
4093
4106
  }
4094
4107
  };
@@ -4137,20 +4150,33 @@ async function captureTexture(device, texture, width, height) {
4137
4150
  }
4138
4151
  async function renderAndCapture(setup, renderFn) {
4139
4152
  const { device, queue } = setup.context;
4140
- const { renderTargetView, commandEncoder, width, height } = setup;
4141
- const passEncoder = commandEncoder.beginRenderPass({
4142
- colorAttachments: [
4143
- {
4144
- view: renderTargetView,
4145
- clearValue: { r: 0, g: 0, b: 0, a: 0 },
4146
- loadOp: "clear",
4147
- storeOp: "store"
4148
- }
4149
- ]
4150
- });
4153
+ const { renderTargetView, commandEncoder, width, height, depthTargetView } = setup;
4154
+ const colorAttachment = {
4155
+ view: renderTargetView,
4156
+ clearValue: { r: 0, g: 0, b: 0, a: 0 },
4157
+ loadOp: "clear",
4158
+ storeOp: "store"
4159
+ };
4160
+ const descriptor = {
4161
+ colorAttachments: [colorAttachment]
4162
+ };
4163
+ if (depthTargetView) {
4164
+ descriptor.depthStencilAttachment = {
4165
+ view: depthTargetView,
4166
+ depthClearValue: 1,
4167
+ depthLoadOp: "clear",
4168
+ depthStoreOp: "discard"
4169
+ };
4170
+ }
4171
+ device.pushErrorScope("validation");
4172
+ const passEncoder = commandEncoder.beginRenderPass(descriptor);
4151
4173
  renderFn(passEncoder);
4152
4174
  passEncoder.end();
4153
4175
  queue.submit([commandEncoder.finish()]);
4176
+ const error = await device.popErrorScope();
4177
+ if (error) {
4178
+ throw new Error(`WebGPU validation error: ${error.message}`);
4179
+ }
4154
4180
  return captureTexture(device, setup.renderTarget, width, height);
4155
4181
  }
4156
4182
  async function createComputeTestSetup(outputSize) {