blob: bef9ac229ba522283c44f42fc7049a8bd9043586 [file] [log] [blame] [edit]
<script>
if (window.testRunner) {
testRunner.waitUntilDone();
testRunner.dumpAsText();
}
onload = async () => {
let adapter0 = await navigator.gpu.requestAdapter(
{
}
);
let adapter1 = await navigator.gpu.requestAdapter(
{
powerPreference: 'low-power',
}
);
let device0 = await adapter0.requestDevice(
{
label: 'a',
requiredFeatures: [
'depth-clip-control',
'indirect-first-instance',
'shader-f16',
'rg11b10ufloat-renderable',
'bgra8unorm-storage'
],
requiredLimits: {
maxTextureDimension3D: 2048,
minStorageBufferOffsetAlignment: Math.max(adapter0.limits.minStorageBufferOffsetAlignment, 64),
minUniformBufferOffsetAlignment: Math.max(adapter0.limits.minUniformBufferOffsetAlignment, 128),
maxComputeWorkgroupStorageSize: 16384 + Math.floor((adapter0.limits.maxComputeWorkgroupStorageSize - 16384) * 0.35),
maxTextureArrayLayers: 256 + Math.floor((adapter0.limits.maxTextureArrayLayers - 256) * 0.30),
maxStorageBuffersPerShaderStage: 8 + Math.floor((adapter0.limits.maxStorageBuffersPerShaderStage - 8) * 0.53),
maxInterStageShaderComponents: 60 + Math.floor((adapter0.limits.maxInterStageShaderComponents - 60) * 0.16),
maxSamplersPerShaderStage: 16 + Math.floor((adapter0.limits.maxSamplersPerShaderStage - 16) * 0.91),
maxBufferSize: 268435456 + Math.floor((adapter0.limits.maxBufferSize - 268435456) * 0.48),
maxBindGroups: 4 + Math.floor((adapter0.limits.maxBindGroups - 4) * 0.58),
maxUniformBufferBindingSize: 65536 + Math.floor((adapter0.limits.maxUniformBufferBindingSize - 65536) * 0.90),
maxInterStageShaderVariables: 16 + Math.floor((adapter0.limits.maxInterStageShaderVariables - 16) * 0.47)
},
}
);
let promise0 = (await navigator.gpu.requestAdapter(
{
}
)).requestDevice(
{
label: 'a',
requiredLimits: {
minUniformBufferOffsetAlignment: Math.max(adapter0.limits.minUniformBufferOffsetAlignment, 32),
maxStorageTexturesPerShaderStage: 4 + Math.floor((adapter0.limits.maxStorageTexturesPerShaderStage - 4) * 0.76),
maxComputeWorkgroupStorageSize: 16384 + Math.floor((adapter0.limits.maxComputeWorkgroupStorageSize - 16384) * 0.88),
maxTextureDimension1D: 8192 + Math.floor((adapter0.limits.maxTextureDimension1D - 8192) * 0.74),
maxStorageBuffersPerShaderStage: 8 + Math.floor((adapter0.limits.maxStorageBuffersPerShaderStage - 8) * 0.13),
maxInterStageShaderComponents: 60 + Math.floor((adapter0.limits.maxInterStageShaderComponents - 60) * 0.24),
maxComputeInvocationsPerWorkgroup: 256 + Math.floor((adapter0.limits.maxComputeInvocationsPerWorkgroup - 256) * 0.72),
maxVertexAttributes: 16 + Math.floor((adapter0.limits.maxVertexAttributes - 16) * 0.97),
maxInterStageShaderVariables: 16 + Math.floor((adapter0.limits.maxInterStageShaderVariables - 16) * 0.91)
},
}
);
let canvas0 = document.createElement('canvas');
let buffer0 = device0.createBuffer(
{
label: 'a',
size: 6547104,
usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM,
mappedAtCreation: true,
}
);
let pipelineLayout0 = device0.createPipelineLayout(
{
label: 'a',
bindGroupLayouts: [
],
}
);
try {
await device0.popErrorScope();
} catch {}
try {
buffer0.destroy();
} catch {}
let shaderModule0 = device0.createShaderModule(
{
label: 'a',
code: `@group(1) @binding(3501)
var<storage, read_write> function0: array<u32>;
@group(0) @binding(3692)
var<storage, read_write> global0: array<u32>;
@group(1) @binding(3724)
var<storage, read_write> global1: array<u32>;
@group(1) @binding(3501)
var<storage, read_write> local0: array<u32>;
@group(0) @binding(4640)
var<storage, read_write> local1: array<u32>;
@group(0) @binding(3501)
var<storage, read_write> __ArgumentBufferT_0: array<u32>;
@group(1) @binding(3501)
var<storage, read_write> function1: array<u32>;
@group(0) @binding(3724)
var<storage, read_write> local2: array<u32>;
@group(0) @binding(1229)
var<storage, read_write> global2: array<u32>;
@group(1) @binding(4640)
var<storage, read_write> function2: array<u32>;
@compute @workgroup_size(7, 2, 2)
fn main(@builtin(global_invocation_id) global_id : vec3<u32>, @builtin(local_invocation_id) local_id : vec3<u32>) {
var x: u32 = 0;
loop {
local1[x] = global_id.x;
x += 1;
global0[global_id.y-global_id.x] = function2[x];
if (x > 2 * arrayLength(&local1)) {
break;
}
}
}
@compute @workgroup_size(7, 1, 2)
fn main2(@builtin(global_invocation_id) global_id : vec3<u32>, @builtin(local_invocation_id) local_id : vec3<u32>) {
global1[global_id.x*local_id.x] = u32(function1[global_id.x*local_id.x]);
}`,
sourceMap: {},
hints: {},
}
);
let querySet0 = device0.createQuerySet(
{
label: 'a',
type: 'occlusion',
count: 2042616,
}
);
let texture0 = device0.createTexture(
{
label: 'a',
size: [
1154,
1414,
8732
],
sampleCount: 4,
dimension: '1d',
format: 'rg16sint',
usage: 0,
viewFormats: [
'rgb9e5ufloat',
'rgb9e5ufloat',
'r32uint',
'astc-10x8-unorm-srgb'
],
}
);
try {
buffer0.destroy();
} catch {}
let promise2 = device0.queue.onSubmittedWorkDone();
try {
await promise2;
} catch {}
let bindGroupLayout1 = device0.createBindGroupLayout(
{
label: 'a',
entries: [
],
}
);
let commandBuffer0 = device0.createCommandEncoder().finish(
{
label: 'a',
}
);
try {
await device0.queue.onSubmittedWorkDone();
} catch {}
try {
buffer0.unmap();
} catch {}
try {
await buffer0.mapAsync(
GPUMapMode.READ,
4983728,
7344136
);
} catch {}
try {
await device0.queue.onSubmittedWorkDone();
} catch {}
let canvas1 = document.createElement('canvas');
try {
buffer0.unmap();
} catch {}
let sampler0 = device0.createSampler(
{
addressModeU: 'clamp-to-edge',
addressModeV: 'clamp-to-edge',
addressModeW: 'mirror-repeat',
magFilter: 'linear',
minFilter: 'linear',
mipmapFilter: 'linear',
}
);
let videoFrame2 = new VideoFrame(await createImageBitmap(canvas0), {timestamp: 0});
let externalTexture1 = device0.importExternalTexture(
{
label: 'a',
source: videoFrame2,
colorSpace: 'srgb',
}
);
try {
await promise3;
} catch {}
let buffer1 = device0.createBuffer(
{
label: 'a',
size: 1513848,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM | GPUBufferUsage.INDIRECT | GPUBufferUsage.VERTEX | GPUBufferUsage.STORAGE | GPUBufferUsage.QUERY_RESOLVE,
mappedAtCreation: true,
}
);
let texture1 = device0.createTexture(
{
label: 'a',
size: [
6196,
674
],
mipLevelCount: 1,
format: 'r8uint',
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING,
viewFormats: [
'rgba32uint',
'r8snorm'
],
}
);
let textureView0 = texture1.createView(
{
label: 'a',
format: 'r16sint',
dimension: '3d',
aspect: 'all',
mipLevelCount: 14,
baseArrayLayer: 2713,
arrayLayerCount: 7028,
}
);
try {
device0.queue.writeBuffer(
buffer1,
2370504,
new ArrayBuffer(3444368),
4797680,
1966912
);
} catch {}
let device2 = await (await navigator.gpu.requestAdapter(
{
}
)).requestDevice(
{
label: 'a',
requiredFeatures: [
'depth32float-stencil8',
'shader-f16',
'rg11b10ufloat-renderable',
'bgra8unorm-storage'
],
requiredLimits: {
minStorageBufferOffsetAlignment: Math.max(adapter0.limits.minStorageBufferOffsetAlignment, 128),
maxDynamicStorageBuffersPerPipelineLayout: 4 + Math.floor((adapter0.limits.maxDynamicStorageBuffersPerPipelineLayout - 4) * 0.32),
maxStorageTexturesPerShaderStage: 4 + Math.floor((adapter0.limits.maxStorageTexturesPerShaderStage - 4) * 0.60),
maxBindingsPerBindGroup: 1000 + Math.floor((adapter0.limits.maxBindingsPerBindGroup - 1000) * 0.59),
maxTextureDimension1D: 8192 + Math.floor((adapter0.limits.maxTextureDimension1D - 8192) * 0.64),
maxSamplersPerShaderStage: 16 + Math.floor((adapter0.limits.maxSamplersPerShaderStage - 16) * 0.78),
maxComputeInvocationsPerWorkgroup: 256 + Math.floor((adapter0.limits.maxComputeInvocationsPerWorkgroup - 256) * 0.59),
maxSampledTexturesPerShaderStage: 16 + Math.floor((adapter0.limits.maxSampledTexturesPerShaderStage - 16) * 0.20),
maxUniformBufferBindingSize: 65536 + Math.floor((adapter0.limits.maxUniformBufferBindingSize - 65536) * 0.75),
maxVertexBufferArrayStride: 2048 + Math.floor((adapter0.limits.maxVertexBufferArrayStride - 2048) * 0.59),
maxColorAttachmentBytesPerSample: 32 + Math.floor((adapter0.limits.maxColorAttachmentBytesPerSample - 32) * 0.61)
},
}
);
let imageData0 = new ImageData(56, 248);
let gpuCanvasContext0 = canvas1.getContext('webgpu');
let adapter2 = await navigator.gpu.requestAdapter();
let querySet1 = device2.createQuerySet(
{
label: 'a',
type: 'occlusion',
count: 7241832,
}
);
let promise4 = navigator.gpu.requestAdapter(
{
powerPreference: 'high-performance',
}
);
try {
await device2.popErrorScope();
} catch {}
try {
device2.queue.writeBuffer(
device2.createBuffer(
{
label: 'a',
size: 2962296,
usage: GPUBufferUsage.INDEX | GPUBufferUsage.INDIRECT | GPUBufferUsage.UNIFORM | GPUBufferUsage.STORAGE,
mappedAtCreation: true,
}
),
5406120,
new ArrayBuffer(1887464),
2768104,
5570864
);
} catch {}
let buffer2 = device2.createBuffer(
{
size: 807896,
usage: 0,
mappedAtCreation: true,
}
);
let commandEncoder0 = device0.createCommandEncoder();
let commandBuffer1 = commandEncoder0.finish(
{
label: 'a',
}
);
try {
commandEncoder0.copyTextureToBuffer(
{
texture: device0.createTexture(
{
label: 'a',
size: {
width: 9165,
height: 1008,
depthOrArrayLayers: 1,
},
sampleCount: 4,
dimension: '1d',
format: 'depth32float',
usage: 0,
viewFormats: [
'rg11b10ufloat',
'depth16unorm',
'rg16float',
'etc2-rgb8unorm'
],
}
),
mipLevel: 4610,
origin: {
z: 1114,
},
aspect: 'stencil-only',
},
{
offset: 6716024,
bytesPerRow: 372112,
rowsPerImage: 7915688,
buffer: buffer0,
},
{
width: 4383,
height: 6088,
depthOrArrayLayers: 1,
}
);
} catch {}
try {
device2.queue.submit(
[
device2.createCommandEncoder().finish(
{
label: 'a',
}
),
device2.createCommandEncoder().finish(
{
label: 'a',
}
)
]
);
} catch {}
try {
device2.queue.copyExternalImageToTexture(
{
source: await createImageBitmap(canvas1),
origin: [
3564,
2967
],
},
{
texture: device2.createTexture(
{
label: 'a',
size: [
918,
1596,
8526
],
sampleCount: 1,
dimension: '3d',
format: 'rgba32uint',
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
viewFormats: [
'bgra8unorm-srgb'
],
}
),
mipLevel: 7892,
aspect: 'all',
colorSpace: 'srgb',
premultipliedAlpha: true,
},
{
width: 2097,
height: 4854,
depthOrArrayLayers: 7849,
}
);
} catch {}
let videoFrame0 = new VideoFrame(await createImageBitmap(canvas1), {timestamp: 0});
let commandEncoder1 = device2.createCommandEncoder(
{
}
);
try {
buffer2.unmap();
} catch {}
try {
await buffer2.mapAsync(
GPUMapMode.WRITE,
2028160,
728304
);
} catch {}
try {
commandEncoder1.copyTextureToTexture(
{
texture: device2.createTexture(
{
label: 'a',
size: {
width: 2966,
height: 280,
depthOrArrayLayers: 5918,
},
mipLevelCount: 3,
dimension: '3d',
format: 'depth16unorm',
usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING,
viewFormats: [
'depth24plus',
'rgba8unorm-srgb',
'rgba8uint',
'rgba8uint',
'astc-6x5-unorm-srgb'
],
}
),
mipLevel: 7590,
origin: [
3119,
4919,
427,
7767
],
aspect: 'all',
},
{
texture: device2.createTexture(
{
label: 'a',
size: [
9996,
1526
],
mipLevelCount: 3,
sampleCount: 4,
dimension: '3d',
format: 'rgba8unorm',
usage: 0,
viewFormats: [
'r8sint',
'astc-10x5-unorm',
'astc-4x4-unorm-srgb'
],
}
),
mipLevel: 1489,
origin: [
9631,
8238,
4082
],
aspect: 'all',
},
[
1988,
9838,
1297
]
);
} catch {}
try {
commandEncoder1.insertDebugMarker(
'a'
);
} catch {}
try {
await device2.popErrorScope();
} catch {}
let adapter5 = await promise4;
try {
commandEncoder0.copyBufferToBuffer(
buffer1,
7618736,
buffer0,
5542400,
4142936
);
} catch {}
try {
device0.queue.writeBuffer(
buffer0,
1903640,
new ArrayBuffer(3659080)
);
} catch {}
try { videoFrame0.close(); } catch {}
try { videoFrame2.close(); } catch {}
if (window.testRunner) { testRunner.notifyDone() }
};
</script>
This test passes if it does not crash.