From 1d402acbefafc45b0e4cb43d253635c291151010 Mon Sep 17 00:00:00 2001 From: Corentin Wallez Date: Wed, 29 Apr 2026 16:15:12 +0200 Subject: [PATCH] Check that an unused, destroyed occlusion query causes submit to fail See https://github.com/gpuweb/gpuweb/issues/6247 --- .../validation/queue/destroyed/query_set.spec.ts | 15 +++++++++++++++ src/webgpu/listing_meta.json | 1 + 2 files changed, 16 insertions(+) diff --git a/src/webgpu/api/validation/queue/destroyed/query_set.spec.ts b/src/webgpu/api/validation/queue/destroyed/query_set.spec.ts index 17841105d47e..8712ac65f052 100644 --- a/src/webgpu/api/validation/queue/destroyed/query_set.spec.ts +++ b/src/webgpu/api/validation/queue/destroyed/query_set.spec.ts @@ -25,6 +25,21 @@ Tests that use a destroyed query set in occlusion query on render pass encoder. encoder.validateFinishAndSubmitGivenState(t.params.querySetState); }); +g.test('unusedOcclusionQuery') + .desc( + ` +Tests that use a destroyed query set in occlusion query on render pass encoder, even if no beginOcclusionQuery calls are done. +- x= {destroyed, not destroyed (control case)} + ` + ) + .paramsSubcasesOnly(u => u.combine('querySetState', ['valid', 'destroyed'] as const)) + .fn(t => { + const occlusionQuerySet = vtu.createQuerySetWithState(t, t.params.querySetState); + + const encoder = t.createEncoder('render pass', { occlusionQuerySet }); + encoder.validateFinishAndSubmitGivenState(t.params.querySetState); + }); + g.test('timestamps') .desc( ` diff --git a/src/webgpu/listing_meta.json b/src/webgpu/listing_meta.json index aef1ebc0be00..76b1c3974bb1 100644 --- a/src/webgpu/listing_meta.json +++ b/src/webgpu/listing_meta.json @@ -734,6 +734,7 @@ "webgpu:api,validation,queue,destroyed,query_set:beginOcclusionQuery:*": { "subcaseMS": 17.401 }, "webgpu:api,validation,queue,destroyed,query_set:resolveQuerySet:*": { "subcaseMS": 16.401 }, "webgpu:api,validation,queue,destroyed,query_set:timestamps:*": { "subcaseMS": 0.901 }, + "webgpu:api,validation,queue,destroyed,query_set:unusedOcclusionQuery:*": { "subcaseMS": 8.855 }, "webgpu:api,validation,queue,destroyed,texture:beginRenderPass:*": { "subcaseMS": 0.350 }, "webgpu:api,validation,queue,destroyed,texture:copyBufferToTexture:*": { "subcaseMS": 16.550 }, "webgpu:api,validation,queue,destroyed,texture:copyTextureToBuffer:*": { "subcaseMS": 15.900 },