[dawn][native] Cleanup BGL creation to better support arraySize

Support for arraySize needs to update ExtractAndExpandBglEntries in
awkward ways because that method and other related code had accumulated
debt. Refactor it a bit in preparation for arraySize.

 - Separate the binding counts used to iterate the BGL from the ones
   used for the validation of total binding counts in the pipeline
   layouts. Extra bindings are accounted for in BindingCounts for
   currently unused ExternalTexture reserved resources (one sampler and
   two sampled textures) and the confusion could cause subtle bugs in
   the future.
 - Change ExtractAndExpandBglEntries to do the conversion to BindingInfo
   internally, which avoids the need to store a linked list of
   BindGroupLayoutEntry on the side. Rename it to
   ConvertAndExpandBGLEntries.
 - Make it return all of its results by value instead of a mix with
   pointers (also go down from 6 things returned to only 2).
 - Update SortBindingsCompare to work with BindingInfo and simplify the
   logic to only what is needed to get the invariants that BGL requires.
 - Make the various *BindingLayout aggregate types by removing their
   constructors and using a static ::From member function instead.
 - Move operator == and != to BindingInfo instead of having it defined
   in BindGroupLayoutInternal.h
 - Remove / inline a couple unused BindGroupLayoutInternal member
   functions.

Bug: 393558555
Change-Id: Idc5365b61460a51ed30d6e829b37dcb05ebd76e5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/236415
Reviewed-by: Loko Kung <lokokung@google.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Brandon Jones <bajones@chromium.org>
8 files changed
tree: 79086b31e823551636ae3a1cbb8b35d1350c694b
  1. .github/
  2. .vscode/
  3. build_overrides/
  4. docs/
  5. generator/
  6. include/
  7. infra/
  8. scripts/
  9. src/
  10. test/
  11. third_party/
  12. tools/
  13. webgpu-cts/
  14. .bazelrc
  15. .clang-format
  16. .clang-tidy
  17. .git-blame-ignore-revs
  18. .gitattributes
  19. .gitignore
  20. .gitmodules
  21. .gn
  22. .vpython3
  23. AUTHORS
  24. BUILD.bazel
  25. BUILD.gn
  26. CMakeLists.txt
  27. CMakeSettings.json
  28. CODE_OF_CONDUCT.md
  29. codereview.settings
  30. CONTRIBUTING.md
  31. CPPLINT.cfg
  32. DEPS
  33. DIR_METADATA
  34. go.mod
  35. go.sum
  36. go_presubmit_support.py
  37. LICENSE
  38. OWNERS
  39. PRESUBMIT.py
  40. README.chromium
  41. README.md
  42. WATCHLISTS
  43. 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.