Split dawn::native::vulkan::Texture into multiple classes.

The Texture class was becoming very difficult to work with as the
handling of regular barriers was mixed with all the external texture
logic which is very complex, making it increasingly harder to understand
what's happening in all of Texture's state.

This commit splits off Texture into:

 - Texture, a base class containing logic for all the regular barrier
   transition.
 - InternalTexture that creates and owns a regular VkImage.
 - SwapChainTexture that owns an externally created VkImage.
 - ExternalVkImageTexture for textures created from the the deprecated
   ExternalImageDescriptorVk image import path.
 - SharedTexture for textures created from a SharedTextureMemory.
 - ImportedTextureBase for common logic between SharedTexture and
   ExternalVkImageTexture until the latter is removed.

No functional changes are intended and most methods have just been
moved to one of the child classes without changes. Exceptions are:

 - DestroyImpl() that has been split off between all child classes.
 - TweakTransition() (formerly TweakTransitionForExternalTexture) which
   is now a virtual method called unconditionally. This could affect
   performance slightly as the hot code path is doing a virtual call
   (that is most often a noop) instead of a boolean, but it could be
   optimized later.
 - CanReuseWithoutBarriers() is now a virtual method overridden by
   ExternalTextureBase to handle the external state. Likewise this could
   have a slight performance cost and could be optimized later.
 - The ExternalState::InternalOnly value was removed, and explicit
   initialization of mLastExternalState is done in
   ExternalVkImageTexture::Initialize.

Finally a member rename in CommandRecordingContext snuck in, that will be
useful in follow-up commits.

Bug:
Change-Id: I27d0e0165e3d0917067c9cd2469fc5fd6173b47e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/207654
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
9 files changed
tree: c7a1502ffbb293e6ce45c3eccd8cd736a457d953
  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. AUTHORS
  23. BUILD.bazel
  24. BUILD.gn
  25. CMakeLists.txt
  26. CMakeSettings.json
  27. CODE_OF_CONDUCT.md
  28. codereview.settings
  29. CONTRIBUTING.md
  30. CPPLINT.cfg
  31. DEPS
  32. DIR_METADATA
  33. go.mod
  34. go.sum
  35. go_presubmit_support.py
  36. LICENSE
  37. OWNERS
  38. PRESUBMIT.py
  39. README.chromium
  40. README.md
  41. WATCHLISTS
  42. 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.