blob: 6647417ae6480147aabd34ff9830faf2d89139b0 [file] [log] [blame] [edit]
<script>
if (window.testRunner) { testRunner.dumpAsText(); testRunner.waitUntilDone() }
onload = async () => {
let adapter1 = await navigator.gpu.requestAdapter();
let adapter2 = await navigator.gpu.requestAdapter(
{
}
);
let adapter0 = await navigator.gpu.requestAdapter(
{
powerPreference: 'high-performance',
}
);
let device1 = await adapter1.requestDevice(
{
label: 'a',
requiredFeatures: [
'depth-clip-control',
'depth32float-stencil8',
'indirect-first-instance',
'shader-f16',
'rg11b10ufloat-renderable',
'bgra8unorm-storage'
],
requiredLimits: {
maxVertexAttributes: 18,
maxVertexBufferArrayStride: 11955,
maxStorageTexturesPerShaderStage: 36,
maxBindingsPerBindGroup: 823,
},
}
);
let device0 = await adapter0.requestDevice(
{
label: 'a',
requiredFeatures: [
'indirect-first-instance',
'shader-f16',
'rg11b10ufloat-renderable',
'bgra8unorm-storage'
],
requiredLimits: {
maxVertexAttributes: 27,
maxVertexBufferArrayStride: 56492,
maxStorageTexturesPerShaderStage: 20,
maxBindingsPerBindGroup: 44,
},
}
);
let buffer2 = device0.createBuffer(
{
label: 'a',
size: 416592,
usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,
mappedAtCreation: true,
}
);
let texture6 = device1.createTexture(
{
label: 'a',
size: {
width: 7082,
height: 2090,
depthOrArrayLayers: 1,
},
mipLevelCount: 11,
format: 'rgb9e5ufloat',
usage: GPUTextureUsage.COPY_DST,
}
);
let arrayBuffer0 = (() => {
try {
return buffer2.getMappedRange();
} catch (e) {
if (e instanceof DOMException && e.name === 'OperationError') {
if (
e.message === 'getMappedRangeFailed because offset + size > mappedRangeSize + mappedRangeOffset'
|| e.message === 'validation failed offset < m_mappedRangeOffset'
|| e.message === 'validation failed - containsRange'
|| e.message === 'not mapped or destroyed'
) {
return new ArrayBuffer(711904);
}
}
throw e;
}
})();
let arrayBuffer1 = (() => {
try {
return buffer2.getMappedRange(
176,
5664
);
} catch (e) {
if (e instanceof DOMException && e.name === 'OperationError') {
if (
e.message === 'getMappedRangeFailed because offset + size > mappedRangeSize + mappedRangeOffset'
|| e.message === 'validation failed offset < m_mappedRangeOffset'
|| e.message === 'validation failed - containsRange'
|| e.message === 'not mapped or destroyed'
) {
return new ArrayBuffer(7470392);
}
}
throw e;
}
})();
let texture0 = device0.createTexture(
{
size: {
width: 521,
depthOrArrayLayers: 1,
},
mipLevelCount: 14,
dimension: '3d',
format: 'rgb9e5ufloat',
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST,
viewFormats: [
'stencil8',
'astc-6x5-unorm'
],
}
);
device0.queue.writeTexture(
{
texture: texture0,
mipLevel: 8007,
origin: {
x: 3805,
z: 8083,
},
aspect: 'depth-only',
},
arrayBuffer0,
{
offset: 2178360,
bytesPerRow: 7878048,
rowsPerImage: 2412496,
},
{
width: 9007,
height: 5238,
depthOrArrayLayers: 1213,
}
);
device1.queue.writeTexture(
{
texture: texture6,
},
arrayBuffer1,
{
offset: 1356656,
bytesPerRow: 3996080,
rowsPerImage: 2422968,
},
{
width: 1693,
depthOrArrayLayers: 1,
}
);
let device2 = await adapter2.requestDevice(
{
label: 'a',
requiredFeatures: [
'depth-clip-control',
'depth32float-stencil8',
'indirect-first-instance',
'shader-f16',
'rg11b10ufloat-renderable'
],
}
);
if (window.testRunner) { testRunner.notifyDone() }
};
</script>
This test passes if it does not crash