| <script> |
| if (window.testRunner) { testRunner.dumpAsText(); testRunner.waitUntilDone() } |
| onload = async () => { |
| let adapter1 = await navigator.gpu.requestAdapter(); |
| |
| let adapter2 = await navigator.gpu.requestAdapter( |
| { |
| } |
| ); |
| |
| let adapter0 = await navigator.gpu.requestAdapter( |
| { |
| powerPreference: 'high-performance', |
| } |
| ); |
| |
| let device1 = await adapter1.requestDevice( |
| { |
| label: 'a', |
| requiredFeatures: [ |
| 'depth-clip-control', |
| 'depth32float-stencil8', |
| 'indirect-first-instance', |
| 'shader-f16', |
| 'rg11b10ufloat-renderable', |
| 'bgra8unorm-storage' |
| ], |
| requiredLimits: { |
| maxVertexAttributes: 18, |
| maxVertexBufferArrayStride: 11955, |
| maxStorageTexturesPerShaderStage: 36, |
| maxBindingsPerBindGroup: 823, |
| }, |
| } |
| ); |
| |
| let device0 = await adapter0.requestDevice( |
| { |
| label: 'a', |
| requiredFeatures: [ |
| 'indirect-first-instance', |
| 'shader-f16', |
| 'rg11b10ufloat-renderable', |
| 'bgra8unorm-storage' |
| ], |
| requiredLimits: { |
| maxVertexAttributes: 27, |
| maxVertexBufferArrayStride: 56492, |
| maxStorageTexturesPerShaderStage: 20, |
| maxBindingsPerBindGroup: 44, |
| }, |
| } |
| ); |
| |
| |
| let buffer2 = device0.createBuffer( |
| { |
| label: 'a', |
| size: 416592, |
| usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, |
| mappedAtCreation: true, |
| } |
| ); |
| |
| let texture6 = device1.createTexture( |
| { |
| label: 'a', |
| size: { |
| width: 7082, |
| height: 2090, |
| depthOrArrayLayers: 1, |
| }, |
| mipLevelCount: 11, |
| format: 'rgb9e5ufloat', |
| usage: GPUTextureUsage.COPY_DST, |
| } |
| ); |
| |
| let arrayBuffer0 = (() => { |
| try { |
| return buffer2.getMappedRange(); |
| } catch (e) { |
| if (e instanceof DOMException && e.name === 'OperationError') { |
| if ( |
| e.message === 'getMappedRangeFailed because offset + size > mappedRangeSize + mappedRangeOffset' |
| || e.message === 'validation failed offset < m_mappedRangeOffset' |
| || e.message === 'validation failed - containsRange' |
| || e.message === 'not mapped or destroyed' |
| ) { |
| return new ArrayBuffer(711904); |
| } |
| } |
| throw e; |
| } |
| })(); |
| |
| let arrayBuffer1 = (() => { |
| try { |
| return buffer2.getMappedRange( |
| 176, |
| 5664 |
| ); |
| } catch (e) { |
| if (e instanceof DOMException && e.name === 'OperationError') { |
| if ( |
| e.message === 'getMappedRangeFailed because offset + size > mappedRangeSize + mappedRangeOffset' |
| || e.message === 'validation failed offset < m_mappedRangeOffset' |
| || e.message === 'validation failed - containsRange' |
| || e.message === 'not mapped or destroyed' |
| ) { |
| return new ArrayBuffer(7470392); |
| } |
| } |
| throw e; |
| } |
| })(); |
| |
| let texture0 = device0.createTexture( |
| { |
| size: { |
| width: 521, |
| depthOrArrayLayers: 1, |
| }, |
| mipLevelCount: 14, |
| dimension: '3d', |
| format: 'rgb9e5ufloat', |
| usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST, |
| viewFormats: [ |
| 'stencil8', |
| 'astc-6x5-unorm' |
| ], |
| } |
| ); |
| |
| device0.queue.writeTexture( |
| { |
| texture: texture0, |
| mipLevel: 8007, |
| origin: { |
| x: 3805, |
| z: 8083, |
| }, |
| aspect: 'depth-only', |
| }, |
| arrayBuffer0, |
| { |
| offset: 2178360, |
| bytesPerRow: 7878048, |
| rowsPerImage: 2412496, |
| }, |
| { |
| width: 9007, |
| height: 5238, |
| depthOrArrayLayers: 1213, |
| } |
| ); |
| |
| device1.queue.writeTexture( |
| { |
| texture: texture6, |
| }, |
| arrayBuffer1, |
| { |
| offset: 1356656, |
| bytesPerRow: 3996080, |
| rowsPerImage: 2422968, |
| }, |
| { |
| width: 1693, |
| depthOrArrayLayers: 1, |
| } |
| ); |
| |
| let device2 = await adapter2.requestDevice( |
| { |
| label: 'a', |
| requiredFeatures: [ |
| 'depth-clip-control', |
| 'depth32float-stencil8', |
| 'indirect-first-instance', |
| 'shader-f16', |
| 'rg11b10ufloat-renderable' |
| ], |
| } |
| ); |
| if (window.testRunner) { testRunner.notifyDone() } |
| }; |
| </script> |
| This test passes if it does not crash |