diff options
author | Leo Kettmeir <crowlkats@toaxl.com> | 2023-03-16 19:29:32 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-17 00:29:32 +0100 |
commit | 35196eab279340376929dd75ed717ef4830e2fa9 (patch) | |
tree | 5aefff339ef50d3e89ff36422c90e929dea3897f /cli/tests | |
parent | 3f031ad9af2d61671f8408632f31592ac4186926 (diff) |
BREAKING(unstable): remove WebGPU (#18094)
This PR _**temporarily**_ removes WebGPU (which has behind the
`--unstable` flag in Deno), due to performance complications due to its
presence.
It will be brought back in the future; as a point of reference, Chrome
will ship WebGPU to stable on 26/04/2023.
---------
Co-authored-by: Bartek IwaĆczuk <biwanczuk@gmail.com>
Diffstat (limited to 'cli/tests')
-rw-r--r-- | cli/tests/testdata/webgpu/computepass_shader.wgsl | 38 | ||||
-rw-r--r-- | cli/tests/testdata/webgpu/hellotriangle.out | bin | 204800 -> 0 bytes | |||
-rw-r--r-- | cli/tests/testdata/webgpu/hellotriangle_shader.wgsl | 11 | ||||
-rw-r--r-- | cli/tests/unit/webgpu_test.ts | 242 |
4 files changed, 0 insertions, 291 deletions
diff --git a/cli/tests/testdata/webgpu/computepass_shader.wgsl b/cli/tests/testdata/webgpu/computepass_shader.wgsl deleted file mode 100644 index 41af4363a..000000000 --- a/cli/tests/testdata/webgpu/computepass_shader.wgsl +++ /dev/null @@ -1,38 +0,0 @@ -@group(0) -@binding(0) -var<storage, read_write> v_indices: array<u32>; // this is used as both input and output for convenience - -// The Collatz Conjecture states that for any integer n: -// If n is even, n = n/2 -// If n is odd, n = 3n+1 -// And repeat this process for each new n, you will always eventually reach 1. -// Though the conjecture has not been proven, no counterexample has ever been found. -// This function returns how many times this recurrence needs to be applied to reach 1. -fn collatz_iterations(n_base: u32) -> u32{ - var n: u32 = n_base; - var i: u32 = 0u; - loop { - if (n <= 1u) { - break; - } - if (n % 2u == 0u) { - n = n / 2u; - } - else { - // Overflow? (i.e. 3*n + 1 > 0xffffffffu?) - if (n >= 1431655765u) { // 0x55555555u - return 4294967295u; // 0xffffffffu - } - - n = 3u * n + 1u; - } - i = i + 1u; - } - return i; -} - -@compute -@workgroup_size(1) -fn main(@builtin(global_invocation_id) global_id: vec3<u32>) { - v_indices[global_id.x] = collatz_iterations(v_indices[global_id.x]); -} diff --git a/cli/tests/testdata/webgpu/hellotriangle.out b/cli/tests/testdata/webgpu/hellotriangle.out Binary files differdeleted file mode 100644 index 91454dbfc..000000000 --- a/cli/tests/testdata/webgpu/hellotriangle.out +++ /dev/null diff --git a/cli/tests/testdata/webgpu/hellotriangle_shader.wgsl b/cli/tests/testdata/webgpu/hellotriangle_shader.wgsl deleted file mode 100644 index f84ccfe94..000000000 --- a/cli/tests/testdata/webgpu/hellotriangle_shader.wgsl +++ /dev/null @@ -1,11 +0,0 @@ -@vertex -fn vs_main(@builtin(vertex_index) in_vertex_index: u32) -> @builtin(position) vec4<f32> { - let x = f32(i32(in_vertex_index) - 1); - let y = f32(i32(in_vertex_index & 1u) * 2 - 1); - return vec4<f32>(x, y, 0.0, 1.0); -} - -@fragment -fn fs_main() -> @location(0) vec4<f32> { - return vec4<f32>(1.0, 0.0, 0.0, 1.0); -} diff --git a/cli/tests/unit/webgpu_test.ts b/cli/tests/unit/webgpu_test.ts deleted file mode 100644 index 2d98167cf..000000000 --- a/cli/tests/unit/webgpu_test.ts +++ /dev/null @@ -1,242 +0,0 @@ -// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. - -import { assert, assertEquals } from "./test_util.ts"; - -let isCI: boolean; -try { - isCI = (Deno.env.get("CI")?.length ?? 0) > 0; -} catch { - isCI = true; -} - -// Skip these tests on linux CI, because the vulkan emulator is not good enough -// yet, and skip on macOS CI because these do not have virtual GPUs. -const isLinuxOrMacCI = - (Deno.build.os === "linux" || Deno.build.os === "darwin") && isCI; -// Skip these tests in WSL because it doesn't have good GPU support. -const isWsl = await checkIsWsl(); - -Deno.test({ - permissions: { read: true, env: true }, - ignore: isWsl || isLinuxOrMacCI, -}, async function webgpuComputePass() { - const adapter = await navigator.gpu.requestAdapter(); - assert(adapter); - - const numbers = [1, 4, 3, 295]; - - const device = await adapter.requestDevice(); - assert(device); - - const shaderCode = await Deno.readTextFile( - "cli/tests/testdata/webgpu/computepass_shader.wgsl", - ); - - const shaderModule = device.createShaderModule({ - code: shaderCode, - }); - - const size = new Uint32Array(numbers).byteLength; - - const stagingBuffer = device.createBuffer({ - size: size, - usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, - }); - - const storageBuffer = device.createBuffer({ - label: "Storage Buffer", - size: size, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | - GPUBufferUsage.COPY_SRC, - mappedAtCreation: true, - }); - - const buf = new Uint32Array(storageBuffer.getMappedRange()); - - buf.set(numbers); - - storageBuffer.unmap(); - - const computePipeline = device.createComputePipeline({ - layout: "auto", - compute: { - module: shaderModule, - entryPoint: "main", - }, - }); - const bindGroupLayout = computePipeline.getBindGroupLayout(0); - - const bindGroup = device.createBindGroup({ - layout: bindGroupLayout, - entries: [ - { - binding: 0, - resource: { - buffer: storageBuffer, - }, - }, - ], - }); - - const encoder = device.createCommandEncoder(); - - const computePass = encoder.beginComputePass(); - computePass.setPipeline(computePipeline); - computePass.setBindGroup(0, bindGroup); - computePass.insertDebugMarker("compute collatz iterations"); - computePass.dispatchWorkgroups(numbers.length); - computePass.end(); - - encoder.copyBufferToBuffer(storageBuffer, 0, stagingBuffer, 0, size); - - device.queue.submit([encoder.finish()]); - - await stagingBuffer.mapAsync(1); - - const data = stagingBuffer.getMappedRange(); - - assertEquals(new Uint32Array(data), new Uint32Array([0, 2, 7, 55])); - - stagingBuffer.unmap(); - - device.destroy(); - - // TODO(lucacasonato): webgpu spec should add a explicit destroy method for - // adapters. - const resources = Object.keys(Deno.resources()); - Deno.close(Number(resources[resources.length - 1])); -}); - -Deno.test({ - permissions: { read: true, env: true }, - ignore: isWsl || isLinuxOrMacCI, -}, async function webgpuHelloTriangle() { - const adapter = await navigator.gpu.requestAdapter(); - assert(adapter); - - const device = await adapter.requestDevice(); - assert(device); - - const shaderCode = await Deno.readTextFile( - "cli/tests/testdata/webgpu/hellotriangle_shader.wgsl", - ); - - const shaderModule = device.createShaderModule({ - code: shaderCode, - }); - - const pipelineLayout = device.createPipelineLayout({ - bindGroupLayouts: [], - }); - - const renderPipeline = device.createRenderPipeline({ - layout: pipelineLayout, - vertex: { - module: shaderModule, - entryPoint: "vs_main", - }, - fragment: { - module: shaderModule, - entryPoint: "fs_main", - targets: [ - { - format: "rgba8unorm-srgb", - }, - ], - }, - }); - - const dimensions = { - width: 200, - height: 200, - }; - const unpaddedBytesPerRow = dimensions.width * 4; - const align = 256; - const paddedBytesPerRowPadding = (align - unpaddedBytesPerRow % align) % - align; - const paddedBytesPerRow = unpaddedBytesPerRow + paddedBytesPerRowPadding; - - const outputBuffer = device.createBuffer({ - label: "Capture", - size: paddedBytesPerRow * dimensions.height, - usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST, - }); - const texture = device.createTexture({ - label: "Capture", - size: dimensions, - format: "rgba8unorm-srgb", - usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC, - }); - - const encoder = device.createCommandEncoder(); - const view = texture.createView(); - const renderPass = encoder.beginRenderPass({ - colorAttachments: [ - { - view, - storeOp: "store", - loadOp: "clear", - clearValue: [0, 1, 0, 1], - }, - ], - }); - renderPass.setPipeline(renderPipeline); - renderPass.draw(3, 1); - renderPass.end(); - - encoder.copyTextureToBuffer( - { - texture, - }, - { - buffer: outputBuffer, - bytesPerRow: paddedBytesPerRow, - rowsPerImage: 0, - }, - dimensions, - ); - - const bundle = encoder.finish(); - device.queue.submit([bundle]); - - await outputBuffer.mapAsync(1); - const data = new Uint8Array(outputBuffer.getMappedRange()); - - assertEquals( - data, - await Deno.readFile("cli/tests/testdata/webgpu/hellotriangle.out"), - ); - - outputBuffer.unmap(); - - device.destroy(); - - // TODO(lucacasonato): webgpu spec should add a explicit destroy method for - // adapters. - const resources = Object.keys(Deno.resources()); - Deno.close(Number(resources[resources.length - 1])); -}); - -Deno.test({ - ignore: isWsl || isLinuxOrMacCI, -}, async function webgpuAdapterHasFeatures() { - const adapter = await navigator.gpu.requestAdapter(); - assert(adapter); - assert(adapter.features); - const resources = Object.keys(Deno.resources()); - Deno.close(Number(resources[resources.length - 1])); -}); - -async function checkIsWsl() { - return Deno.build.os === "linux" && await hasMicrosoftProcVersion(); - - async function hasMicrosoftProcVersion() { - // https://github.com/microsoft/WSL/issues/423#issuecomment-221627364 - try { - const procVersion = await Deno.readTextFile("/proc/version"); - return /microsoft/i.test(procVersion); - } catch { - return false; - } - } -} |