Skip to content

image_copy:mip_levels tests fail for bc compressed formats with AMD Radeon RX 5500 XT on macOS #4378

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
beaufortfrancois opened this issue Apr 30, 2025 · 17 comments

Comments

@beaufortfrancois
Copy link
Collaborator

beaufortfrancois commented Apr 30, 2025

According to https://ci.chromium.org/ui/p/chromium/builders/try/mac-dawn-rel/45372/overview, it seems like AMD Radeon RX 5500 XT is having issues on macOS for the following image_copy:mip_levels tests for BC compressed formats:

webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc1-rgba-unorm-srgb";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc2-rgba-unorm-srgb";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc3-rgba-unorm-srgb";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-snorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc4-r-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-snorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc5-rg-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-float";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc6h-rgb-ufloat";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="FullCopyT2B";format="bc7-rgba-unorm-srgb";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc1-rgba-unorm-srgb";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc2-rgba-unorm-srgb";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc3-rgba-unorm-srgb";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-snorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc4-r-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-snorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc5-rg-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-float";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc6h-rgb-ufloat";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm";dimension="3d" [ Failure ]
webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc7-rgba-unorm-srgb";dimension="3d" [ Failure ]
Here's the cause of a failure for webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="3d"
[82/18697] webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="CopyB2T";checkMethod="FullCopyT2B";format="bc1-rgba-unorm";dimension="3d" failed unexpectedly 8.1362s (worker 3):
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":1};originInBlocks={"x":3,"y":2,"z":0};mipLevel=1;textureSize=[64,48,2]
      OK
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":1};originInBlocks={"x":3,"y":2,"z":0};mipLevel=1;textureSize=[60,48,2]
      OK
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":1};originInBlocks={"x":3,"y":2,"z":0};mipLevel=1;textureSize=[64,44,2]
      OK
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":1};originInBlocks={"x":3,"y":2,"z":0};mipLevel=1;textureSize=[60,44,2]
      OK
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":1};originInBlocks={"x":3,"y":2,"z":0};mipLevel=1;textureSize=[64,48,3]
      OK
  --> EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=2;textureSize=[128,96,12]
      Array had unexpected contents at indices 2072 through 2879.
       Starting at index 2071:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
      Error
          at ImageCopyTest.eventualAsyncExpectation (http://127.0.0.1:52406/third_party/webgpu-cts/src/common/framework/fixture.js:205:28)
          at ImageCopyTest.expectGPUBufferValuesPassCheck (http://127.0.0.1:52406/third_party/webgpu-cts/src/webgpu/gpu_test.js:465:14)
          at ImageCopyTest.expectGPUBufferValuesEqual (http://127.0.0.1:52406/third_party/webgpu-cts/src/webgpu/gpu_test.js:475:14)
          at ImageCopyTest.expectGPUBufferValuesEqualWhenInterpretedAsTextureFormat (http://127.0.0.1:52406/third_party/webgpu-cts/src/webgpu/api/operation/command_buffer/image_copy.spec.js:136:18)
          at ImageCopyTest.copyPartialTextureToBufferAndCheckContents (http://127.0.0.1:52406/third_party/webgpu-cts/src/webgpu/api/operation/command_buffer/image_copy.spec.js:327:14)
          at http://127.0.0.1:52406/third_party/webgpu-cts/src/webgpu/api/operation/command_buffer/image_copy.spec.js:359:18
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=2;textureSize=[128,96,12]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=2;textureSize=[120,96,12]
      Array had unexpected contents at indices 2072 through 2879.
       Starting at index 2071:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
      Error
          at ImageCopyTest.eventualAsyncExpectation (http://127.0.0.1:52406/third_party/webgpu-cts/src/common/framework/fixture.js:205:28)
          at ImageCopyTest.expectGPUBufferValuesPassCheck (http://127.0.0.1:52406/third_party/webgpu-cts/src/webgpu/gpu_test.js:465:14)
          at ImageCopyTest.expectGPUBufferValuesEqual (http://127.0.0.1:52406/third_party/webgpu-cts/src/webgpu/gpu_test.js:475:14)
          at ImageCopyTest.expectGPUBufferValuesEqualWhenInterpretedAsTextureFormat (http://127.0.0.1:52406/third_party/webgpu-cts/src/webgpu/api/operation/command_buffer/image_copy.spec.js:136:18)
          at ImageCopyTest.copyPartialTextureToBufferAndCheckContents (http://127.0.0.1:52406/third_party/webgpu-cts/src/webgpu/api/operation/command_buffer/image_copy.spec.js:327:14)
          at http://127.0.0.1:52406/third_party/webgpu-cts/src/webgpu/api/operation/command_buffer/image_copy.spec.js:359:18
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=2;textureSize=[120,96,12]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=2;textureSize=[128,88,12]
      Array had unexpected contents at indices 2072 through 2879.
       Starting at index 2071:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=2;textureSize=[128,88,12]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=2;textureSize=[120,88,12]
      Array had unexpected contents at indices 2072 through 2879.
       Starting at index 2071:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=2;textureSize=[120,88,12]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=2;textureSize=[128,96,13]
      Array had unexpected contents at indices 2072 through 2879.
       Starting at index 2071:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=2;textureSize=[128,96,13]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=3;textureSize=[256,224,32]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=3;textureSize=[256,224,32]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=3;textureSize=[240,224,32]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=3;textureSize=[240,224,32]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=3;textureSize=[256,208,32]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=3;textureSize=[256,208,32]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=3;textureSize=[240,208,32]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=3;textureSize=[240,208,32]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=3;textureSize=[256,224,33]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=3;textureSize=[256,224,33]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,384,64]
      Array had unexpected contents at indices 2072 through 2879.
       Starting at index 2071:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,384,64]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,384,64]
      Array had unexpected contents at indices 2072 through 2879.
       Starting at index 2071:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,384,64]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,352,64]
      Array had unexpected contents at indices 2072 through 2879.
       Starting at index 2071:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,352,64]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,352,64]
      Array had unexpected contents at indices 2072 through 2879.
       Starting at index 2071:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,352,64]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,384,65]
      Array had unexpected contents at indices 2072 through 2879.
       Starting at index 2071:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,384,65]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,448,48]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,448,48]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,448,48]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,448,48]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,416,48]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,416,48]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,416,48]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,416,48]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,448,49]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,448,49]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,448,64]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,448,64]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,448,64]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,448,64]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,416,64]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,416,64]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,416,64]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[544,416,64]
      OK
    - EXPECTATION FAILED: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,448,65]
      Array had unexpected contents at indices 2328 through 3135.
       Starting at index 2327:
         actual == 0x: 00 59 21 85 90 48 ae cd ab 4e b7 f1 07 f0 c1 7b 24 bd 56 eb 8c 3a f6 d0 c9 e7 35 af 65 58 8e 12 e0 0d 90 ...
         failed ->        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ...
       expected ==     00 01 03 0b 1f 45 83 df 64 13 ed 07 58 eb cb f9 80 61 a2 4e 66 f0 f7 81 8f 2c 59 21 85 90 48 ae cd ab 4e ...
        at (elided: only 2 shown)
    - INFO: subcase: copySizeInBlocks={"width":5,"height":4,"depthOrArrayLayers":2};originInBlocks={"x":3,"y":2,"z":1};mipLevel=4;textureSize=[576,448,65]
      OK

Any idea if it's a CTS issue or a AMD Radeon RX 5500 XT driver bug?
FYI @greggman since 1a47862 introduced this

@beaufortfrancois
Copy link
Collaborator Author

@mwyrzykowski Same as #4377, does this look familiar to you?

@greggman
Copy link
Contributor

I don't have access to my AMD Mac. I'm assuming it doesn't fail on the same device on Intel?

@beaufortfrancois beaufortfrancois changed the title image_copy:mip_levels tests fail for bc1-rgba-unorm and bc4-r-unorm formats with AMD Radeon RX 5500 XT on macOS image_copy:mip_levels tests fail for bc compressed formats with AMD Radeon RX 5500 XT on macOS Apr 30, 2025
@beaufortfrancois
Copy link
Collaborator Author

I don't have access to my AMD Mac. I'm assuming it doesn't fail on the same device on Intel?

That's my understanding when looking at https://dawn-review.googlesource.com/c/dawn/+/239483/3/webgpu-cts/expectations.txt?checksPatchset=2

@greggman
Copy link
Contributor

Yea well, looking here, they passed on intel (you need to click "load more")

@beaufortfrancois
Copy link
Collaborator Author

You're right. Thanks for the explanation!

Image

@beaufortfrancois
Copy link
Collaborator Author

@greggman Did you have a chance to try it on your AMD Mac by any chance?

@greggman
Copy link
Contributor

greggman commented May 2, 2025

unfortunately I will not be near my AMD Mac until June

If anyone else wants to try it go to https://gpuweb.github.io/cts/standalone/?debug=1&power_preference=high-performance&runnow=1&q=webgpu:api,operation,command_buffer,image_copy:mip_levels:* in Chrome canary on AMD Mac. The bc format should look like this. 2 tests per format, one for '2d', on for '3d'. Both green. This screenshot is from M1 mac.

Image

Here's a link for low-power. Should be Intel on a dual GPU mac

https://gpuweb.github.io/cts/standalone/?debug=1&power_preference=low-power&runnow=1&q=webgpu:api,operation,command_buffer,image_copy:mip_levels:*

@mwyrzykowski
Copy link

I tried on a Pro Vega 56, it fails there, Canary version 138.0.7156.0 (Official Build) canary (x86_64):

Image

@greggman
Copy link
Contributor

greggman commented May 3, 2025

So I tried these tests on Swiftshader. They mostly pass though I think they eventually run out of memory. It looks like they make some pretty big textures. The astc-12x12-unorm 3d ones especially, the largest texture they make is 1728,1344,64 which compressed is 16meg. But to compare they render to 1728x1344*64 rgba8unorm which is 594meg x 2! I could make them compare one layer at a time, or, I can just make them not choose such large sizes (no idea why those particular numbers)

@beaufortfrancois
Copy link
Collaborator Author

@greggman Could https://issues.chromium.org/issues/415303046#comment5 and this CTS bug related?

@greggman
Copy link
Contributor

greggman commented May 5, 2025

Ugh,

Okay, so, I got this idea that I would add a high-water mark to the webgpu-memory tracking library, then put that into the webgpu-dev-extension so I could easily apply it to the CTS and see if other places are using lots of memory.

I haven't tested all the CTS yet, but with regards to this test, in core it uses 235meg, in compat it uses 638meg because of the need to render. But, it's not using lots of memory because of the texture size as it's only rendering mip level 4 which is (108x84x4). Instead the issue is that subcases run in parallel and the test is async since it has to mapAsync to check the results which effectively means every subcase does the copy, makes the textures, then awaits on map, then checks the results. The effect of which is all subcases do their setup, using 638meg, and only after that, all subcases check their results.

I'm not exactly sure the best way to fix this.

We can:

  1. make less things subcases

    Making every case a subcae makes the suite of tests use 47meg. To actually commit it
    the parameter names would have to be super shortened to make the query under limit.

  2. figure out a way to throttle the CTS on memory usage?

    Maybe the CTS itself should set a budget. It knows every buffer and texture
    allocated. If the tests go over the budget it could wait for subcases/cases to finish
    until the usage is under the budget before running more cases/subcases

    It would require patching texture.destroy() and buffer.destroy() or
    deprecating them the cts for t.destroyBufferTracked, t.destroyTextureTracked or
    someting along those lines.

  3. make the sizes smaller

    The sizes don't feel unreasonable

  4. change the checker to compare on the GPU and just return true/false in a 4 byte buffer

    that means all other resources can be deleted before calling mapAsync but it also
    mean less useful info if/when the tests fail. This is also a big refactor. The
    code is not designed around allowing the texture/buffers to be deleted.

  5. similar to 4, restructure the code to delete more resources before the mapAsync

    I tried quickly. There's a lot of refactoring involved.

I'm kind of leaning on exploring (2) (@kainino0x - thougts?)

@beaufortfrancois
Copy link
Collaborator Author

FYI Some tests from webgpu:api,operation,command_buffer,image_copy:mip_levels:initMethod="WriteTexture";checkMethod="PartialCopyT2B";format="bc*";dimension="3d" also fail on Linux Intel according to https://dawn-review.googlesource.com/c/dawn/+/240279/3/webgpu-cts/expectations.txt

@kainino0x
Copy link
Collaborator

maxSubcasesInFlight is a global config. One really quick fix could be to make it a per-test option.

2 would be cool, it might even help with some other tests, but maybe it's unnecessarily complicated?

@greggman
Copy link
Contributor

greggman commented May 6, 2025

maxSubcasesInFlight is a global config. One really quick fix could be to make it a per-test option.

2 would be cool, it might even help with some other tests, but maybe it's unnecessarily complicated?

I can do that.

Just FYI to others following this thread. This memory issue is not the cause of the failures. 690meg is not that much on an AMD Mac and the tests passed on the same Mac on Intel

@beaufortfrancois
Copy link
Collaborator Author

IIUC 2 would be nice but would not necessarily fix the root issue of those image_copy:mip_levels tests that fail for bc compressed formats with AMD Radeon RX 5500 XT on macOS right?

@greggman
Copy link
Contributor

IIUC 2 would be nice but would not necessarily fix the root issue of those image_copy:mip_levels tests that fail for bc compressed formats with AMD Radeon RX 5500 XT on macOS right?

Correct, it will not fix the failures. It's just something I noticed when looking at the tests.

@beaufortfrancois
Copy link
Collaborator Author

Shall we wait until June so that you can investigate?
In the meantime, I may disable this feature for AMD on macOS in Dawn. WDYT?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants