diff --git a/engine/src/flutter/impeller/compositor/formats.h b/engine/src/flutter/impeller/compositor/formats.h index 56fc305ab48..fd90ee07898 100644 --- a/engine/src/flutter/impeller/compositor/formats.h +++ b/engine/src/flutter/impeller/compositor/formats.h @@ -15,6 +15,8 @@ namespace impeller { enum class PixelFormat { kUnknown, + kPixelFormat_R8G8B8A8_UNormInt, + kPixelFormat_R8G8B8A8_UNormInt_SRGB, kPixelFormat_B8G8R8A8_UNormInt, kPixelFormat_B8G8R8A8_UNormInt_SRGB, kPixelFormat_D32_Float_S8_UNormInt, @@ -97,8 +99,9 @@ constexpr size_t BytesPerPixelForPixelFormat(PixelFormat format) { switch (format) { case PixelFormat::kUnknown: return 0u; + case PixelFormat::kPixelFormat_R8G8B8A8_UNormInt: + case PixelFormat::kPixelFormat_R8G8B8A8_UNormInt_SRGB: case PixelFormat::kPixelFormat_B8G8R8A8_UNormInt: - return 4u; case PixelFormat::kPixelFormat_B8G8R8A8_UNormInt_SRGB: return 4u; case PixelFormat::kPixelFormat_D32_Float_S8_UNormInt: diff --git a/engine/src/flutter/impeller/compositor/formats_metal.h b/engine/src/flutter/impeller/compositor/formats_metal.h index cea758a5b7c..af38261604b 100644 --- a/engine/src/flutter/impeller/compositor/formats_metal.h +++ b/engine/src/flutter/impeller/compositor/formats_metal.h @@ -27,6 +27,10 @@ constexpr MTLPixelFormat ToMTLPixelFormat(PixelFormat format) { return MTLPixelFormatBGRA8Unorm_sRGB; case PixelFormat::kPixelFormat_D32_Float_S8_UNormInt: return MTLPixelFormatDepth32Float_Stencil8; + case PixelFormat::kPixelFormat_R8G8B8A8_UNormInt: + return MTLPixelFormatRGBA8Unorm; + case PixelFormat::kPixelFormat_R8G8B8A8_UNormInt_SRGB: + return MTLPixelFormatRGBA8Unorm_sRGB; } return MTLPixelFormatInvalid; }; diff --git a/engine/src/flutter/impeller/compositor/texture.mm b/engine/src/flutter/impeller/compositor/texture.mm index 0723d8dad5d..f9f71d581ce 100644 --- a/engine/src/flutter/impeller/compositor/texture.mm +++ b/engine/src/flutter/impeller/compositor/texture.mm @@ -23,6 +23,10 @@ Texture::Texture(TextureDescriptor desc, id texture) Texture::~Texture() = default; +void Texture::SetLabel(const std::string_view& label) { + [texture_ setLabel:@(label.data())]; +} + bool Texture::SetContents(const uint8_t* contents, size_t length) { if (!IsValid() || !contents) { return false; diff --git a/engine/src/flutter/impeller/compositor/texture_descriptor.mm b/engine/src/flutter/impeller/compositor/texture_descriptor.mm index 18021e8e78b..78f7cf85320 100644 --- a/engine/src/flutter/impeller/compositor/texture_descriptor.mm +++ b/engine/src/flutter/impeller/compositor/texture_descriptor.mm @@ -18,7 +18,7 @@ std::optional FormatForImageResultComponents( case ImageResult::Components::RGB: return std::nullopt; case ImageResult::Components::RGBA: - return PixelFormat::kPixelFormat_B8G8R8A8_UNormInt; + return PixelFormat::kPixelFormat_R8G8B8A8_UNormInt; } return std::nullopt; } diff --git a/engine/src/flutter/impeller/primitives/primitives_unittests.mm b/engine/src/flutter/impeller/primitives/primitives_unittests.mm index 653db6b1d11..582e7a835ff 100644 --- a/engine/src/flutter/impeller/primitives/primitives_unittests.mm +++ b/engine/src/flutter/impeller/primitives/primitives_unittests.mm @@ -55,6 +55,7 @@ TEST_F(PrimitivesTest, CanCreateBoxPrimitive) { auto texture = context->GetPermanentsAllocator()->CreateTexture( StorageMode::kHostVisible, texture_descriptor.value()); ASSERT_TRUE(texture); + texture->SetLabel("Bay Bridge"); auto uploaded = texture->SetContents(result.GetAllocation()->GetMapping(), result.GetAllocation()->GetSize()); ASSERT_TRUE(uploaded);