blob: 7f736373d1922f96500f53f1b98878fedc53419a [file] [log] [blame] [edit]
<!-- webkit-test-runner [ enableMetalShaderValidation=true ] -->
<style>
:root { background: #102030e0; color: #99ddbbcc; font-size: 15px; }
</style>
<script src="../../../resources/js-test-pre.js"></script>
<script id="shared">
const log = console.debug;
</script>
<script>
globalThis.testRunner?.waitUntilDone();
async function window0() {
let adapter0 = await navigator.gpu.requestAdapter({});
let promise0 = adapter0.requestDevice({
defaultQueue: {},
requiredFeatures: [
'depth32float-stencil8',
'texture-compression-etc2',
'texture-compression-astc',
'indirect-first-instance',
'shader-f16',
'rg11b10ufloat-renderable',
'bgra8unorm-storage',
'float32-blendable',
'float16-renderable',
'float32-renderable',
],
requiredLimits: {
maxDynamicUniformBuffersPerPipelineLayout: 8,
maxStorageBufferBindingSize: 166585208,
maxUniformBufferBindingSize: 45952403,
},
});
let adapter1 = await navigator.gpu.requestAdapter({});
let device0 = await adapter1.requestDevice({
requiredFeatures: [
'depth-clip-control',
'texture-compression-etc2',
'texture-compression-astc',
'indirect-first-instance',
'shader-f16',
'rg11b10ufloat-renderable',
'bgra8unorm-storage',
'float32-blendable',
'float16-renderable',
'timestamp-query',
],
requiredLimits: {
maxBindingsPerBindGroup: 1000,
maxColorAttachmentBytesPerSample: 32,
maxInterStageShaderVariables: 16,
maxStorageBufferBindingSize: 161632061,
maxUniformBufferBindingSize: 41379376,
},
});
// START
c = device0.createTexture({
size : [],
format : 'rg11b10ufloat',
usage : GPUTextureUsage.RENDER_ATTACHMENT
})
d = c.createView()
e = device0.createBuffer(
{size : 44, usage : GPUBufferUsage.INDIRECT | GPUBufferUsage.VERTEX})
f = device0.createBuffer({size : 60, usage : GPUBufferUsage.INDEX})
h = device0.createBuffer({size : 2, usage : GPUBufferUsage.INDEX})
i = device0.createPipelineLayout({bindGroupLayouts : []})
j = device0.createRenderBundleEncoder({colorFormats : [ 'rg11b10ufloat' ]})
k = device0.createBuffer({size : 47, usage : GPUBufferUsage.VERTEX})
try {
j.setIndexBuffer(f, 'uint32')
} catch {
}
l = device0.createCommandEncoder()
m = device0.createShaderModule({
code : `
struct n {
@location(0) o: vec4f}
struct p {
@builtin(position) position: vec4f}
@vertex fn q() -> p {
var out: p;
return out;
}
@fragment fn s() -> n {
var out: n;
return out;
}
`
})
aa = device0.createBuffer({size : 6, usage : GPUBufferUsage.VERTEX})
try {
j.setVertexBuffer(0, k)
} catch {
}
t = device0.createRenderBundleEncoder({colorFormats : [ 'rg11b10ufloat' ]})
try {
t.setVertexBuffer(0, aa)
} catch {
}
ab = device0.createRenderPipeline({
layout : 'auto',
fragment : {module : m, targets : [ {format : 'rg11b10ufloat'} ]},
vertex : {
module : m,
buffers : [ {
arrayStride : 24,
attributes : [ {format : 'uint32x4', offset : 8, shaderLocation : 7} ]
} ]
}
})
u = await device0.createRenderPipelineAsync({
layout : i,
fragment : {module : m, targets : [ {format : 'rg11b10ufloat'} ]},
vertex : {module : m}
})
try {
t.setIndexBuffer(h, 'uint16')
} catch {
}
try {
j.setPipeline(ab)
} catch {
}
v = l.beginRenderPass(
{colorAttachments : [ {view : d, loadOp : 'clear', storeOp : 'store'} ]})
try {
j.drawIndexedIndirect(e, 0)
} catch {
}
x = j.finish()
y = device0.createBuffer({size : 443, usage : GPUBufferUsage.INDIRECT})
try {
t.setPipeline(u)
} catch {
}
try {
t.drawIndexedIndirect(y, 4)
} catch {
}
z = t.finish()
try {
v.setVertexBuffer(0, e)
} catch {
}
try {
v.setPipeline(ab)
} catch {
}
try {
v.draw(0)
} catch {
}
try {
v.executeBundles([ z, x ])
} catch {
}
try {
v.end()
} catch {
}
ac = l.finish()
try {
device0.queue.submit([ ac ])
} catch {
}
// END
await device0.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?.dumpAsText();
globalThis.testRunner?.notifyDone();
};
</script>