blob: 3e81e4eb501d89caa249a67a276e978aa729e4d2 [file]
<style>
:root { background: #102030e0; color: #99ddbbcc; font-size: 15px; }
</style>
<script src="../../../resources/js-test-pre.js"></script>
<script id="shared">
const log = console.log;
</script>
<script>
globalThis.testRunner?.dumpAsText();
globalThis.testRunner?.waitUntilDone();
async function window0() {
// START
a = await navigator.gpu.requestAdapter()
b = await a.requestDevice()
c = b.createBindGroupLayout({entries : []})
d = b.createTexture({
size : {width : 10, depthOrArrayLayers : 9},
format : 'rgba16uint',
usage : GPUTextureUsage.STORAGE_BINDING
})
e = b.createBindGroupLayout({
entries : [
{
binding : 32,
visibility : GPUShaderStage.FRAGMENT,
storageTexture : {format : 'rg32uint', viewDimension : '3d'}
},
{binding : 111, visibility : GPUShaderStage.FRAGMENT, externalTexture : {}},
{
binding : 216,
visibility : GPUShaderStage.FRAGMENT,
storageTexture : {
format : 'rgba16uint',
access : 'read-only',
viewDimension : '2d-array'
}
}
]
})
f = b.createTexture({
size : [],
dimension : '3d',
format : 'rg32uint',
usage : GPUTextureUsage.STORAGE_BINDING
})
k = d.createView()
g = b.createBindGroupLayout({
entries : [
{
binding : 32,
visibility : GPUShaderStage.FRAGMENT,
storageTexture : {format : 'rg32uint', viewDimension : '3d'}
},
{binding : 111, visibility : GPUShaderStage.FRAGMENT, externalTexture : {}},
{
binding : 216,
visibility : GPUShaderStage.FRAGMENT,
storageTexture : {
format : 'rgba16uint',
access : 'read-only',
viewDimension : '2d-array'
}
}
]
})
m = b.createPipelineLayout({bindGroupLayouts : [ e ]})
h = f.createView()
i = b.createTexture({
size : [ 6, 5, 65 ],
dimension : '3d',
format : 'r32sint',
usage : GPUTextureUsage.RENDER_ATTACHMENT
})
j = i.createView()
p = b.createShaderModule({
code : `
override l: f32;
struct n {
@builtin(position) o: vec4f}
@vertex fn t() -> n {
var aa: n;
return aa;
_ = l;
}
`
})
q = new VideoFrame(
new ArrayBuffer(16),
{codedWidth : 2, codedHeight : 2, format : 'BGRA', timestamp : 0})
r = b.createShaderModule({
code : `
@group(0) @binding(32) var ab: texture_storage_3d<rg32uint, write>;
struct s {
@location(0) o: i32}
@fragment fn a() -> s {
var aa: s;
textureStore(ab, vec3i(), vec4u());
return aa;
}
`
})
u = b.importExternalTexture({source : q})
b.createBindGroup({
layout : g,
entries : [
{binding : 32, resource : h}, {binding : 216, resource : k},
{binding : 111, resource : u}
]
})
v = b.createBindGroup({
layout : c,
entries : [
{binding : 2, resource : h}, {binding : 6, resource : k},
{binding : 1, resource : u}
]
})
w = await b.createRenderPipelineAsync({
layout : m,
fragment : {module : r, targets : [ {format : 'r32sint'} ]},
vertex : {module : p, constants : {l : 1}},
primitive : {topology : 'point-list'}
})
ad = b.createCommandEncoder()
ae = ad.beginRenderPass({
colorAttachments :
[ {view : j, depthSlice : 8, loadOp : 'load', storeOp : 'store'} ]
})
try {
ae.setPipeline(w)
ae.setBindGroup(0, v)
ae.draw(6)
ae.end()
} catch {
}
ag = ad.finish()
try {
b.queue.submit([ ag ])
} catch {
}
// END
await b.queue.onSubmittedWorkDone();
}
onload = async () => {
try {
let sharedScript = document.querySelector('#shared').textContent;
let workers = [
];
let promises = [ window0() ];
debug('promises created');
let results = await Promise.allSettled(promises);
for (let result of results) {
if (result.status === 'rejected') { throw result.reason; }
}
debug('Pass')
} 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);
}
}
globalThis.testRunner?.notifyDone();
};
</script>