d3d12: Validate subgroup matrix configurations in HLSL

D3D shader compilation did not validate subgroup matrix usage against
the configurations advertised by the adapter. Unsupported type and
shape combinations could therefore reach backend pipeline creation.

The Vulkan shader compilation path already validates subgroup matrix
metadata against the adapter configuration list. Match that behavior for
D3D by having the HLSL writer return subgroup matrix metadata, passing
the adapter configuration list through the compilation request, and
validating the metadata before compiling HLSL. Including the
configurations in the request also keeps shader cache entries specific
to device support.

Add end-to-end coverage for each configuration advertised by the
adapter, plus copies with an unadvertised M dimension. Pipeline creation
must succeed for advertised configurations and fail for the modified
configurations.

Bug: 507459351
Change-Id: Ic7fa4069d62e78867cd69b0231183b08a901d8e0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/335895
Commit-Queue: Yang Gu <ygu@microsoft.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: James Price <jrprice@google.com>
9 files changed
tree: 935153b153a72ba7828e2ace47944a93ab5e98b1
  1. .github/
  2. .vscode/
  3. agents/
  4. build_overrides/
  5. docs/
  6. generator/
  7. include/
  8. infra/
  9. scripts/
  10. src/
  11. test/
  12. third_party/
  13. tools/
  14. webgpu-cts/
  15. .bazelignore
  16. .bazelrc
  17. .bazelversion
  18. .clang-format
  19. .clang-format-ignore
  20. .clang-tidy
  21. .git-blame-ignore-revs
  22. .gitattributes
  23. .gitignore
  24. .gitmodules
  25. .gn
  26. .style.yapf
  27. .vpython3
  28. AUTHORS
  29. BUILD.bazel
  30. BUILD.gn
  31. CMakeLists.txt
  32. CMakeSettings.json
  33. CODE_OF_CONDUCT.md
  34. codereview.settings
  35. CONTRIBUTING.md
  36. CPPLINT.cfg
  37. DEPS
  38. DIR_METADATA
  39. go.mod
  40. go.sum
  41. go_presubmit_support.py
  42. LICENSE
  43. MODULE.bazel
  44. MODULE.bazel.lock
  45. OWNERS
  46. PRESUBMIT.py
  47. PRESUBMIT_test.py
  48. README.chromium
  49. README.md
  50. unsafe_buffers_paths.txt
  51. WATCHLISTS
  52. WORKSPACE.bazel
README.md

Build Status Matrix Space

Dawn, a WebGPU implementation

Dawn is an open-source and cross-platform implementation of the WebGPU standard. More precisely it implements webgpu.h that is a one-to-one mapping with the WebGPU IDL. Dawn is meant to be integrated as part of a larger system and is the underlying implementation of WebGPU in Chromium.

Dawn provides several WebGPU building blocks:

  • WebGPU C/C++ headers that applications and other building blocks use.
    • The webgpu.h version that Dawn implements.
    • A C++ wrapper for the webgpu.h.
  • A “native” implementation of WebGPU using platforms' GPU APIs: D3D12, Metal, Vulkan and OpenGL. See per API support for more details.
  • A client-server implementation of WebGPU for applications that are in a sandbox without access to native drivers
  • Tint is a compiler for the WebGPU Shader Language (WGSL) that can be used in standalone to convert shaders from and to WGSL.

Helpful links:

Documentation table of content

Developer documentation:

User documentation: (TODO, figure out what overlaps with the webgpu.h docs)

License

BSD 3-Clause License, please see LICENSE.

Disclaimer

This is not an officially supported Google product.