| export const description = ` |
| Validation for encoding queries. |
| `; |
| |
| import { makeTestGroup } from '../../../../../common/framework/test_group.js'; |
| import { kQueryTypes } from '../../../../capability_info.js'; |
| import { AllFeaturesMaxLimitsGPUTest } from '../../../../gpu_test.js'; |
| import * as vtu from '../../validation_test_utils.js'; |
| |
| import { createQuerySetWithType } from './common.js'; |
| |
| export const g = makeTestGroup(AllFeaturesMaxLimitsGPUTest); |
| |
| g.test('occlusion_query,query_type') |
| .desc( |
| ` |
| Tests that set occlusion query set with all types in render pass descriptor: |
| - type {occlusion (control case), timestamp} |
| - {undefined} for occlusion query set in render pass descriptor |
| ` |
| ) |
| .params(u => u.combine('type', [undefined, ...kQueryTypes])) |
| .fn(t => { |
| const type = t.params.type; |
| if (type) { |
| t.skipIfDeviceDoesNotSupportQueryType(type); |
| } |
| const querySet = type === undefined ? undefined : createQuerySetWithType(t, type, 1); |
| |
| const encoder = t.createEncoder('render pass', { occlusionQuerySet: querySet }); |
| encoder.encoder.beginOcclusionQuery(0); |
| encoder.encoder.endOcclusionQuery(); |
| encoder.validateFinish(type === 'occlusion'); |
| }); |
| |
| g.test('occlusion_query,invalid_query_set') |
| .desc( |
| ` |
| Tests that begin occlusion query with a invalid query set that failed during creation. |
| ` |
| ) |
| .paramsSubcasesOnly(u => u.combine('querySetState', ['valid', 'invalid'] as const)) |
| .fn(t => { |
| const occlusionQuerySet = vtu.createQuerySetWithState(t, t.params.querySetState); |
| |
| const encoder = t.createEncoder('render pass', { occlusionQuerySet }); |
| encoder.encoder.beginOcclusionQuery(0); |
| encoder.encoder.endOcclusionQuery(); |
| encoder.validateFinishAndSubmitGivenState(t.params.querySetState); |
| }); |
| |
| g.test('occlusion_query,query_index') |
| .desc( |
| ` |
| Tests that begin occlusion query with query index: |
| - queryIndex {in, out of} range for GPUQuerySet |
| ` |
| ) |
| .paramsSubcasesOnly(u => u.combine('queryIndex', [0, 2])) |
| .fn(t => { |
| const occlusionQuerySet = createQuerySetWithType(t, 'occlusion', 2); |
| |
| const encoder = t.createEncoder('render pass', { occlusionQuerySet }); |
| encoder.encoder.beginOcclusionQuery(t.params.queryIndex); |
| encoder.encoder.endOcclusionQuery(); |
| encoder.validateFinish(t.params.queryIndex < 2); |
| }); |