| <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> |
| |