blob: 8b6efd34d8d82ecbb5521b62248b9d2bf741cf04 [file]
<style>
:root { background: #102030e0; color: #99ddbbcc; font-size: 15px; }
</style>
<script id="shared">
const log = console.log;
</script>
<script>
globalThis.testRunner?.waitUntilDone();
async function window0() {
let adapter0 = await navigator.gpu.requestAdapter();
let device0 = await adapter0.requestDevice();
// START
c = device0.createTexture({
size : [],
format : 'depth24plus-stencil8',
usage : GPUTextureUsage.TEXTURE_BINDING
})
d = device0.createTexture(
{
size : [ 4, 4, 20 ],
format : 'rgba32sint',
usage : GPUTextureUsage.STORAGE_BINDING
})
e = device0.createTexture({
size : {width : 1},
format : 'r32sint',
usage : GPUTextureUsage.STORAGE_BINDING
})
f = e.createView()
h = device0.createTexture({
size : {width : 5},
dimension : '1d',
format : 'r32uint',
usage : GPUTextureUsage.STORAGE_BINDING
})
i = device0.createBuffer({size : 4, usage : GPUBufferUsage.UNIFORM})
j = device0.createBindGroupLayout({
entries : [
{
binding : 2,
visibility : GPUShaderStage.COMPUTE,
buffer : {type : 'storage', hasDynamicOffset : true}
},
{binding : 111, visibility : GPUShaderStage.COMPUTE, buffer : {}}, {
binding : 264,
visibility : GPUShaderStage.COMPUTE,
buffer : {type : 'storage'}
}
]
})
k = device0.createRenderBundleEncoder({colorFormats : [ 'rgba8uint' ]})
l = d.createView()
m = device0.createTexture({
size : [ 2, 5, 67 ],
dimension : '3d',
format : 'rgba8uint',
usage : GPUTextureUsage.RENDER_ATTACHMENT
})
n = m.createView()
o = device0.createBindGroupLayout({
entries : [
{
binding : 0,
visibility : GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT,
storageTexture :
{format : 'r32uint', access : 'read-write', viewDimension : '1d'}
},
{
binding : 5,
visibility :
GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT | GPUShaderStage,
buffer : {type : 'read-only-storage', hasDynamicOffset : true}
},
{
binding : 13,
visibility : GPUShaderStage.FRAGMENT,
buffer : {type : 'storage', hasDynamicOffset : true}
},
{
binding : 15,
visibility : GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT,
storageTexture : {format : 'r32sint', access : 'read-write'}
},
{
binding : 43,
visibility :
GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT | GPUShaderStage,
texture : {sampleType : 'depth'}
},
{
binding : 45,
visibility : GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT,
storageTexture : {format : 'rgba32sint', viewDimension : '2d-array'}
}
]
})
q = device0.createBuffer({size : 5763, usage : GPUBufferUsage.STORAGE})
s = c.createView()
aa = device0.createPipelineLayout({bindGroupLayouts : [ o ]})
t = device0.createShaderModule({
code : `
struct ab {
@location(0) ac: vec4u}
@id(39156) override u: i32;
@fragment fn v() -> ab {
var ad: ab;
return ad;
_ = u;
}
`
})
w = device0.createBuffer({size : 60, usage : GPUBufferUsage.STORAGE})
ae = h.createView()
x = device0.createBindGroupLayout({
entries : [
{
binding : 0,
visibility : GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT,
storageTexture :
{format : 'r32uint', access : 'read-write', viewDimension : '1d'}
},
{
binding : 5,
visibility :
GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT | GPUShaderStage,
buffer : {type : 'read-only-storage', hasDynamicOffset : true}
},
{
binding : 13,
visibility : GPUShaderStage.FRAGMENT,
buffer : {type : 'storage', hasDynamicOffset : true}
},
{
binding : 15,
visibility : GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT,
storageTexture : {format : 'r32sint', access : 'read-write'}
},
{
binding : 43,
visibility :
GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT | GPUShaderStage,
texture : {sampleType : 'depth'}
},
{
binding : 45,
visibility : GPUShaderStage.COMPUTE | GPUShaderStage.FRAGMENT,
storageTexture : {format : 'rgba32sint', viewDimension : '2d-array'}
}
]
})
y = device0.createShaderModule({
code : `
struct z {
@builtin(position) position: vec4f}
@vertex fn af() -> z {
var ad: z;
return ad;
}
`
})
ag = device0.createCommandEncoder()
ah = ag.beginRenderPass({
colorAttachments :
[ {view : n, depthSlice : 7, loadOp : 'load', storeOp : 'discard'} ]
})
aj = device0.createBindGroup({
layout : x,
entries : [
{binding : 15, resource : f}, {binding : 0, resource : ae},
{binding : 5, resource : {buffer : w}},
{binding : 13, resource : {buffer : q, size : 4}},
{binding : 45, resource : l}, {binding : 43, resource : s}
]
})
ak = device0.createRenderPipeline({
layout : aa,
fragment : {
module : t,
constants : {39_156 : 1},
targets : [ {format : 'rgba8uint'} ]
},
vertex : {module : y}
})
try {
k.setPipeline(ak)
} catch {
}
al = device0.createBindGroup({
layout : j,
entries : [
{binding : 111, resource : {buffer : i}},
{binding : 2, resource : {buffer : q, size : 36}},
{binding : 264, resource : {buffer : q, size : 12}}
]
})
try {
k.setBindGroup(0, aj, new Uint32Array(91), 9, 2)
k.draw(3)
k.setBindGroup(0, al, new Uint32Array(6), 1, 1)
} catch {
}
am = k.finish()
try {
ah.executeBundles([ am ])
} catch {
}
// END
await device0.queue.onSubmittedWorkDone();
}
onload = async () => {
try {
let sharedScript = document.querySelector('#shared').textContent;
let workers = [
];
let promises = [ window0() ];
log('promises created');
let results = await Promise.allSettled(promises);
for (let result of results) {
if (result.status === 'rejected') { throw result.reason; }
}
log('the end')
log(location);
} catch (e) {
log('error');
log(e);
log(e[Symbol.toStringTag]);
log(e.stack);
if (e instanceof GPUPipelineError) {
log(`${e} - ${e.reason}`);
} else if (e instanceof DOMException) {
if (e.name === 'OperationError') {
log(e.message);
} else if (e.name === 'InvalidStateError') {
} else {
log(e);
}
} else if (e instanceof GPUValidationError) {
} else if (e instanceof GPUOutOfMemoryError) {
} else if (e instanceof TypeError) {
log(e);
} else {
log('unexpected error type');
log(e);
}
}
log('Pass');
globalThis.testRunner?.dumpAsText();
globalThis.testRunner?.notifyDone();
};
</script>