[runtime][flutter_runner] Handle non-linear image tiling correctly
Tiling::LINEAR was incorrectly passed to Scenic for tiled images.
This happen to work as Scenic ignores this value and
assumes that Tiling::GPU_OPTIMAL is always used. In order to
have Scenic support Tiling::LINEAR we need flutter runner to
pass image info to Scenic with correct tiling value.
Use VkImageCreateInfo tiling value to determine the tiling
parameter to pass to Scenic.
Test: linear image support in Scenic doesn't break flutter runner
Change-Id: Ib4b0575c70c3b0ca90d3c29aa6597add177a58f5
diff --git a/runtime/flutter_runner/vulkan_surface.cc b/runtime/flutter_runner/vulkan_surface.cc
index e2c0e8e..3f8d8c5 100644
--- a/runtime/flutter_runner/vulkan_surface.cc
+++ b/runtime/flutter_runner/vulkan_surface.cc
@@ -336,7 +336,18 @@
image_info.stride = 4 * sk_surface_->width();
image_info.pixel_format = fuchsia::images::PixelFormat::BGRA_8;
image_info.color_space = fuchsia::images::ColorSpace::SRGB;
- image_info.tiling = fuchsia::images::Tiling::LINEAR;
+ switch (vulkan_image_.vk_image_create_info.tiling) {
+ case VK_IMAGE_TILING_OPTIMAL:
+ image_info.tiling = fuchsia::images::Tiling::GPU_OPTIMAL;
+ break;
+ case VK_IMAGE_TILING_LINEAR:
+ image_info.tiling = fuchsia::images::Tiling::LINEAR;
+ break;
+ default:
+ FML_DLOG(ERROR) << "Bad image tiling: "
+ << vulkan_image_.vk_image_create_info.tiling;
+ return false;
+ }
session_image_ = std::make_unique<scenic::Image>(
*scenic_memory_, 0 /* memory offset */, std::move(image_info));