[gpu] Check for nv12 texture creation in D3DBacking::IsSupported

Meet has a couples of issues where presentation on AMD GPUs with
NV12 textures fails. This may be due to issues with AMD drivers where
NV12 textures of large sizes/resolutions are not supported for
creation and results in green or blank screen. Earlier before creating
multiplanar shared images, NV12 buffer would have two R8 and RG88
shared images with each having R8/RG88 d3d texture which did not have
any issues with sizes. Now, for NV12 buffer we create a single NV12
d3d texture.

With current path, the client uses software video decode which
goes through GpuMemoryBufferVideoFramePool and creates a Compound
backing that contains shared memory and D3D image backing. The D3D
backing is lazy created and later fails to create the NV12 texture
on demand leading to green screen. If we know this when checking for
support in IsSupported, we can fallback to pixel upload path in
VideoResourceUpdater that creates a WrappedSkImageBacking and should
work as there is no d3d texture involved.

Assuming this is the issue, this change tries creating an NV12 d3d11
texture when checking for support and adds relevant crashes keys for
d3d11 error code and size on texture creation failure. It also adds
a crash dump which will trigger crash reports having valuable GPU
information for further debugging and a proper GPU driver specific fix.

Bug: b/357068614 b/346717134
Change-Id: I319ff1f0403aa5a84c08888baa5b1dad589a0a86
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5920224
Commit-Queue: Saifuddin Hitawala <hitawala@chromium.org>
Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1367177}
2 files changed
tree: 52be4263b1f81a0009ae95a22555f758394b4dee
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. codelabs/
  13. components/
  14. content/
  15. crypto/
  16. dbus/
  17. device/
  18. docs/
  19. extensions/
  20. fuchsia_web/
  21. gin/
  22. google_apis/
  23. google_update/
  24. gpu/
  25. headless/
  26. infra/
  27. ios/
  28. ipc/
  29. media/
  30. mojo/
  31. native_client_sdk/
  32. net/
  33. pdf/
  34. ppapi/
  35. printing/
  36. remoting/
  37. rlz/
  38. sandbox/
  39. services/
  40. skia/
  41. sql/
  42. storage/
  43. styleguide/
  44. testing/
  45. third_party/
  46. tools/
  47. ui/
  48. url/
  49. webkit/
  50. .clang-format
  51. .clang-tidy
  52. .clangd
  53. .git-blame-ignore-revs
  54. .gitallowed
  55. .gitattributes
  56. .gitignore
  57. .gitmodules
  58. .gn
  59. .mailmap
  60. .rustfmt.toml
  61. .vpython3
  62. .yapfignore
  63. ATL_OWNERS
  64. AUTHORS
  65. BUILD.gn
  66. CODE_OF_CONDUCT.md
  67. codereview.settings
  68. CPPLINT.cfg
  69. CRYPTO_OWNERS
  70. DEPS
  71. DIR_METADATA
  72. LICENSE
  73. LICENSE.chromium_os
  74. OWNERS
  75. PRESUBMIT.py
  76. PRESUBMIT_test.py
  77. PRESUBMIT_test_mocks.py
  78. README.md
  79. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure.

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.