[go: nahoru, domu]

DawnContextProvider: create dawn instance with cache interface

So compiled shaders from graphite dawn will be stored into disk to
avoid re-compiling shaders between chrome runs.

Bug: 1454867
Change-Id: If6a2a7a552b13c29a2e4ea2c9411b98898cf0252
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4615640
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Peng Huang <penghuang@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1160452}
diff --git a/gpu/ipc/service/gpu_channel_manager.h b/gpu/ipc/service/gpu_channel_manager.h
index acdb14b5..35bddb6 100644
--- a/gpu/ipc/service/gpu_channel_manager.h
+++ b/gpu/ipc/service/gpu_channel_manager.h
@@ -45,11 +45,9 @@
 #include "ui/gl/gl_surface.h"
 #include "url/gurl.h"
 
-namespace base {
-namespace trace_event {
+namespace base::trace_event {
 class TracedValue;
-}  // namespace trace_event
-}  // namespace base
+}  // namespace base::trace_event
 
 namespace gl {
 class GLShareGroup;
@@ -58,15 +56,16 @@
 namespace gpu {
 
 class BuiltInShaderCacheWriter;
-class SharedImageManager;
+class DawnContextProvider;
+class ImageDecodeAcceleratorWorker;
 struct GpuPreferences;
 class GpuChannel;
 class GpuChannelManagerDelegate;
 class GpuMemoryBufferFactory;
 class GpuWatchdogThread;
-class ImageDecodeAcceleratorWorker;
 class MailboxManager;
 class Scheduler;
+class SharedImageManager;
 class SyncPointManager;
 struct VideoMemoryUsageStats;
 
@@ -107,7 +106,9 @@
       ImageDecodeAcceleratorWorker* image_decode_accelerator_worker,
       viz::VulkanContextProvider* vulkan_context_provider = nullptr,
       viz::MetalContextProvider* metal_context_provider = nullptr,
-      DawnContextProvider* dawn_context_provider = nullptr);
+      DawnContextProvider* dawn_context_provider = nullptr,
+      webgpu::DawnCachingInterfaceFactory* dawn_caching_interface_factory =
+          nullptr);
 
   GpuChannelManager(const GpuChannelManager&) = delete;
   GpuChannelManager& operator=(const GpuChannelManager&) = delete;
@@ -226,15 +227,9 @@
     return gr_shader_cache_ ? &*gr_shader_cache_ : nullptr;
   }
 
-#if BUILDFLAG(USE_DAWN)
   webgpu::DawnCachingInterfaceFactory* dawn_caching_interface_factory() {
     return dawn_caching_interface_factory_.get();
   }
-#else
-  webgpu::DawnCachingInterfaceFactory* dawn_caching_interface_factory() {
-    return nullptr;
-  }
-#endif
 
   // raster::GrShaderCache::Client implementation.
   void StoreShader(const std::string& key, const std::string& shader) override;
@@ -386,10 +381,7 @@
   absl::optional<raster::GrShaderCache> gr_shader_cache_;
   scoped_refptr<SharedContextState> shared_context_state_;
 
-#if BUILDFLAG(USE_DAWN)
-  std::unique_ptr<webgpu::DawnCachingInterfaceFactory>
-      dawn_caching_interface_factory_;
-#endif
+  raw_ptr<webgpu::DawnCachingInterfaceFactory> dawn_caching_interface_factory_;
 
   // With --enable-vulkan, |vulkan_context_provider_| will be set from
   // viz::GpuServiceImpl. The raster decoders will use it for rasterization if