diff --git a/engine/src/flutter/lib/ui/painting/image_decoder_impeller.cc b/engine/src/flutter/lib/ui/painting/image_decoder_impeller.cc index e72d63bc7a..5b5a2b09ed 100644 --- a/engine/src/flutter/lib/ui/painting/image_decoder_impeller.cc +++ b/engine/src/flutter/lib/ui/painting/image_decoder_impeller.cc @@ -466,7 +466,11 @@ ImageDecoderImpeller::UploadTextureToStorage( } impeller::TextureDescriptor texture_descriptor; +#ifdef FML_OS_IOS texture_descriptor.storage_mode = impeller::StorageMode::kHostVisible; +#else + texture_descriptor.storage_mode = impeller::StorageMode::kDevicePrivate; +#endif // FML_OS_IOS texture_descriptor.format = pixel_format.value(); texture_descriptor.size = {image_info.width(), image_info.height()}; texture_descriptor.mip_count = 1; diff --git a/engine/src/flutter/lib/ui/painting/image_decoder_unittests.cc b/engine/src/flutter/lib/ui/painting/image_decoder_unittests.cc index 968c09d344..2c5b6bbb5b 100644 --- a/engine/src/flutter/lib/ui/painting/image_decoder_unittests.cc +++ b/engine/src/flutter/lib/ui/painting/image_decoder_unittests.cc @@ -24,6 +24,7 @@ #include "flutter/testing/test_gl_surface.h" #include "flutter/testing/testing.h" #include "fml/logging.h" +#include "impeller/core/formats.h" #include "impeller/core/runtime_types.h" #include "impeller/renderer/command_queue.h" #include "third_party/skia/include/codec/SkCodecAnimation.h" @@ -386,6 +387,16 @@ TEST_F(ImageDecoderFixtureTest, ImpellerUploadToSharedNoGpu) { ASSERT_EQ(result.second, ""); EXPECT_EQ(no_gpu_access_context->DidDisposeResources(), true); +#if FML_OS_IOS + EXPECT_EQ( + result.first->impeller_texture()->GetTextureDescriptor().storage_mode, + impeller::StorageMode::kHostVisible); +#else + EXPECT_EQ( + result.first->impeller_texture()->GetTextureDescriptor().storage_mode, + impeller::StorageMode::kDevicePrivate); +#endif // FML_OS_IOS + no_gpu_access_context->FlushTasks(/*fail=*/true); }