[go: nahoru, domu]

viz: Cleanup format specification and separate from ResourceProvider

This removes a bunch of complexity around formats that is superfluous,
and removes format selection from the LayerTreeResourceProvider,
eliminating a use of the ContextProvider from it. This might help
with implmenting 826886, or just be a cleanup that I found while
trying it out.

The RasterBufferProvider impls were using a format specified in the
LayerTreeSettings if it was supported, based on the opacity of the
content. However the only possible format that the settings would
specify other than the default was RGBA_4444 which is always
supported if specified. And opacity doesn't actually play into any
decisions made anymore.

So stop passing around opacity, and ask viz::PlatformColor for a
format to use in the RasterBufferProvider impls, with the caveat that
RGBA_4444 should be preferred (for gpu compositing) if specified by
the settings.

R=kylechar@chromium.org
TBR=piman

Bug: 826886
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I74200eb54bef57fa663eede861661c876a87a408
Reviewed-on: https://chromium-review.googlesource.com/1024703
Commit-Queue: danakj <danakj@chromium.org>
Reviewed-by: danakj <danakj@chromium.org>
Reviewed-by: enne <enne@chromium.org>
Reviewed-by: kylechar <kylechar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#553748}
diff --git a/cc/raster/zero_copy_raster_buffer_provider.cc b/cc/raster/zero_copy_raster_buffer_provider.cc
index 9cefe8af..fd2bb21 100644
--- a/cc/raster/zero_copy_raster_buffer_provider.cc
+++ b/cc/raster/zero_copy_raster_buffer_provider.cc
@@ -183,7 +183,8 @@
     RasterBufferProvider::PlaybackToMemory(
         gpu_memory_buffer_->memory(0), resource_format_, resource_size_,
         gpu_memory_buffer_->stride(0), raster_source, raster_full_rect,
-        raster_full_rect, transform, resource_color_space_, playback_settings);
+        raster_full_rect, transform, resource_color_space_,
+        /*gpu_compositing=*/true, playback_settings);
     gpu_memory_buffer_->Unmap();
   }
 
@@ -204,14 +205,12 @@
 }  // namespace
 
 ZeroCopyRasterBufferProvider::ZeroCopyRasterBufferProvider(
-    LayerTreeResourceProvider* resource_provider,
     gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
     viz::ContextProvider* compositor_context_provider,
-    viz::ResourceFormat preferred_tile_format)
-    : resource_provider_(resource_provider),
-      gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
+    viz::ResourceFormat tile_format)
+    : gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
       compositor_context_provider_(compositor_context_provider),
-      preferred_tile_format_(preferred_tile_format) {}
+      tile_format_(tile_format) {}
 
 ZeroCopyRasterBufferProvider::~ZeroCopyRasterBufferProvider() = default;
 
@@ -235,24 +234,15 @@
 
 void ZeroCopyRasterBufferProvider::Flush() {}
 
-viz::ResourceFormat ZeroCopyRasterBufferProvider::GetResourceFormat(
-    bool must_support_alpha) const {
-  if (resource_provider_->IsTextureFormatSupported(preferred_tile_format_)) {
-    if (!must_support_alpha)
-      return preferred_tile_format_;
-    if (DoesResourceFormatSupportAlpha(preferred_tile_format_))
-      return preferred_tile_format_;
-  }
-  return resource_provider_->best_texture_format();
+viz::ResourceFormat ZeroCopyRasterBufferProvider::GetResourceFormat() const {
+  return tile_format_;
 }
 
-bool ZeroCopyRasterBufferProvider::IsResourceSwizzleRequired(
-    bool must_support_alpha) const {
-  return ResourceFormatRequiresSwizzle(GetResourceFormat(must_support_alpha));
+bool ZeroCopyRasterBufferProvider::IsResourceSwizzleRequired() const {
+  return !viz::PlatformColor::SameComponentOrder(GetResourceFormat());
 }
 
-bool ZeroCopyRasterBufferProvider::IsResourcePremultiplied(
-    bool must_support_alpha) const {
+bool ZeroCopyRasterBufferProvider::IsResourcePremultiplied() const {
   return true;
 }