blob: affa644df7d926de92bbca54f1eb31b65bc438d8 [file] [log] [blame]
export const description = `
Tests that you can not use bgra8unorm-srgb in compat mode.
Tests that textureBindingViewDimension must compatible with texture dimension
`;
import { makeTestGroup } from '../../../../../common/framework/test_group.js';
import { kTextureDimensions, kTextureViewDimensions } from '../../../../capability_info.js';
import {
kCompatModeUnsupportedStorageTextureFormats,
kDifferentBaseFormatTextureFormats,
getBlockInfoForTextureFormat,
getBaseFormatForTextureFormat,
} from '../../../../format_info.js';
import { getTextureDimensionFromView } from '../../../../util/texture/base.js';
import { CompatibilityTest } from '../../../compatibility_test.js';
export const g = makeTestGroup(CompatibilityTest);
g.test('unsupportedTextureFormats')
.desc(`Tests that you can not create a bgra8unorm-srgb texture in compat mode.`)
.fn(t => {
t.expectGPUErrorInCompatibilityMode(
'validation',
() =>
t.createTextureTracked({
size: [1, 1, 1],
format: 'bgra8unorm-srgb',
usage: GPUTextureUsage.TEXTURE_BINDING,
}),
true
);
});
g.test('unsupportedTextureViewFormats')
.desc(
`Tests that you can not create a bgra8unorm texture with a bgra8unorm-srgb viewFormat in compat mode.`
)
.fn(t => {
t.expectGPUErrorInCompatibilityMode(
'validation',
() =>
t.createTextureTracked({
size: [1, 1, 1],
format: 'bgra8unorm',
viewFormats: ['bgra8unorm-srgb'],
usage: GPUTextureUsage.TEXTURE_BINDING,
}),
true
);
});
g.test('invalidTextureBindingViewDimension')
.desc(
`Tests that you can not specify a textureBindingViewDimension that is incompatible with the texture's dimension.`
)
.params(u =>
u //
.combine('dimension', kTextureDimensions)
.combine('textureBindingViewDimension', kTextureViewDimensions)
)
.fn(t => {
const { dimension, textureBindingViewDimension } = t.params;
const depthOrArrayLayers =
dimension === '1d' ||
textureBindingViewDimension === '1d' ||
textureBindingViewDimension === '2d'
? 1
: 6;
const shouldError =
getTextureDimensionFromView(textureBindingViewDimension) !== dimension ||
textureBindingViewDimension === 'cube-array';
t.expectGPUErrorInCompatibilityMode(
'validation',
() => {
t.createTextureTracked({
size: [1, 1, depthOrArrayLayers],
format: 'rgba8unorm',
usage: GPUTextureUsage.TEXTURE_BINDING,
dimension,
textureBindingViewDimension,
});
},
shouldError
);
});
g.test('depthOrArrayLayers_incompatible_with_textureBindingViewDimension')
.desc(
`Tests
* if textureBindingViewDimension is '2d' then depthOrArrayLayers must be 1
* if textureBindingViewDimension is 'cube' then depthOrArrayLayers must be 6
`
)
.params(u =>
u //
.combine('textureBindingViewDimension', ['2d', 'cube'] as const)
.combine('depthOrArrayLayers', [1, 3, 6, 12])
)
.fn(t => {
const { textureBindingViewDimension, depthOrArrayLayers } = t.params;
const shouldError =
(textureBindingViewDimension === '2d' && depthOrArrayLayers !== 1) ||
(textureBindingViewDimension === 'cube' && depthOrArrayLayers !== 6);
t.expectGPUErrorInCompatibilityMode(
'validation',
() => {
t.createTextureTracked({
size: [1, 1, depthOrArrayLayers],
format: 'rgba8unorm',
usage: GPUTextureUsage.TEXTURE_BINDING,
textureBindingViewDimension,
});
},
shouldError
);
});
g.test('format_reinterpretation')
.desc(
`
Tests that you can not request different view formats when creating a texture.
For example, rgba8unorm can not be viewed as rgba8unorm-srgb
`
)
.params(u =>
u //
.combine('format', kDifferentBaseFormatTextureFormats)
)
.fn(t => {
const { format } = t.params;
t.skipIfTextureFormatNotSupported(format);
const info = getBlockInfoForTextureFormat(format);
const baseFormat = getBaseFormatForTextureFormat(format);
const formatPairs = [
{ format, viewFormats: [baseFormat] },
{ format: baseFormat, viewFormats: [format] },
{ format, viewFormats: [format, baseFormat] },
{ format: baseFormat, viewFormats: [format, baseFormat] },
];
for (const { format, viewFormats } of formatPairs) {
t.expectGPUErrorInCompatibilityMode(
'validation',
() => {
t.createTextureTracked({
size: [info.blockWidth, info.blockHeight],
format,
viewFormats,
usage: GPUTextureUsage.TEXTURE_BINDING,
});
},
true
);
}
});
g.test('unsupportedStorageTextureFormats')
.desc(`Tests that you can not create unsupported storage texture formats in compat mode.`)
.params(u => u.combine('format', kCompatModeUnsupportedStorageTextureFormats))
.fn(t => {
const { format } = t.params;
t.expectGPUErrorInCompatibilityMode(
'validation',
() =>
t.createTextureTracked({
size: [1, 1, 1],
format,
usage: GPUTextureUsage.STORAGE_BINDING,
}),
true
);
});