Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 67ef86c

Browse files
committed
[Impeller] Remove transient usage from sampled and stored images
fixes: flutter/flutter#121633 Also works around flutter/flutter#121634
1 parent 43f28d2 commit 67ef86c

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

impeller/renderer/backend/vulkan/allocator_vk.cc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,27 @@ static constexpr vk::ImageUsageFlags ToVKImageUsageFlags(PixelFormat format,
132132

133133
if (usage & static_cast<TextureUsageMask>(TextureUsage::kShaderRead)) {
134134
vk_usage |= vk::ImageUsageFlagBits::eSampled;
135+
// unmark the usage as transient if it is used as a sampled image
136+
// See: https://github.com/flutter/flutter/issues/121633
137+
if (mode == StorageMode::kDeviceTransient) {
138+
vk_usage &= ~vk::ImageUsageFlagBits::eTransientAttachment;
139+
}
135140
}
136141

137142
if (usage & static_cast<TextureUsageMask>(TextureUsage::kShaderWrite)) {
138143
vk_usage |= vk::ImageUsageFlagBits::eStorage;
144+
// unmark the usage as transient if it is used as a storage image
145+
// See: https://github.com/flutter/flutter/issues/121633
146+
if (mode == StorageMode::kDeviceTransient) {
147+
vk_usage &= ~vk::ImageUsageFlagBits::eTransientAttachment;
148+
}
139149
}
140150

151+
// TODO (https://github.com/flutter/flutter/issues/121634):
152+
// Add transfer usage flags to support blit passes
153+
vk_usage |= vk::ImageUsageFlagBits::eTransferSrc |
154+
vk::ImageUsageFlagBits::eTransferDst;
155+
141156
return vk_usage;
142157
}
143158

impeller/renderer/backend/vulkan/swapchain_impl_vk.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@ static std::optional<vk::CompositeAlphaFlagBitsKHR> ChooseAlphaCompositionMode(
9090
if (flags & vk::CompositeAlphaFlagBitsKHR::eOpaque) {
9191
return vk::CompositeAlphaFlagBitsKHR::eOpaque;
9292
}
93+
if (flags & vk::CompositeAlphaFlagBitsKHR::eInherit) {
94+
return vk::CompositeAlphaFlagBitsKHR::eInherit;
95+
}
96+
if (flags & vk::CompositeAlphaFlagBitsKHR::ePostMultiplied) {
97+
return vk::CompositeAlphaFlagBitsKHR::ePostMultiplied;
98+
}
99+
93100
return std::nullopt;
94101
}
95102

0 commit comments

Comments
 (0)