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

Commit ca173b4

Browse files
authored
[Impeller] Remove transient usage from sampled and stored images (#39957)
1 parent f37f48d commit ca173b4

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

impeller/renderer/backend/vulkan/allocator_vk.cc

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

133133
if (usage & static_cast<TextureUsageMask>(TextureUsage::kShaderRead)) {
134134
vk_usage |= vk::ImageUsageFlagBits::eSampled;
135+
// Device transient images can only be used as attachments. The caller
136+
// specified incorrect usage flags and is attempting to read a device
137+
// transient image in a shader. Unset the transient attachment flag. See:
138+
// https://github.com/flutter/flutter/issues/121633
139+
if (mode == StorageMode::kDeviceTransient) {
140+
vk_usage &= ~vk::ImageUsageFlagBits::eTransientAttachment;
141+
}
135142
}
136143

137144
if (usage & static_cast<TextureUsageMask>(TextureUsage::kShaderWrite)) {
138145
vk_usage |= vk::ImageUsageFlagBits::eStorage;
146+
// Device transient images can only be used as attachments. The caller
147+
// specified incorrect usage flags and is attempting to read a device
148+
// transient image in a shader. Unset the transient attachment flag. See:
149+
// https://github.com/flutter/flutter/issues/121633
150+
if (mode == StorageMode::kDeviceTransient) {
151+
vk_usage &= ~vk::ImageUsageFlagBits::eTransientAttachment;
152+
}
139153
}
140154

155+
// TODO (https://github.com/flutter/flutter/issues/121634):
156+
// Add transfer usage flags to support blit passes
157+
vk_usage |= vk::ImageUsageFlagBits::eTransferSrc |
158+
vk::ImageUsageFlagBits::eTransferDst;
159+
141160
return vk_usage;
142161
}
143162

impeller/renderer/backend/vulkan/swapchain_impl_vk.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,19 @@ static std::optional<vk::SurfaceFormatKHR> ChooseSurfaceFormat(
8484

8585
static std::optional<vk::CompositeAlphaFlagBitsKHR> ChooseAlphaCompositionMode(
8686
vk::CompositeAlphaFlagsKHR flags) {
87+
if (flags & vk::CompositeAlphaFlagBitsKHR::eInherit) {
88+
return vk::CompositeAlphaFlagBitsKHR::eInherit;
89+
}
8790
if (flags & vk::CompositeAlphaFlagBitsKHR::ePreMultiplied) {
8891
return vk::CompositeAlphaFlagBitsKHR::ePreMultiplied;
8992
}
93+
if (flags & vk::CompositeAlphaFlagBitsKHR::ePostMultiplied) {
94+
return vk::CompositeAlphaFlagBitsKHR::ePostMultiplied;
95+
}
9096
if (flags & vk::CompositeAlphaFlagBitsKHR::eOpaque) {
9197
return vk::CompositeAlphaFlagBitsKHR::eOpaque;
9298
}
99+
93100
return std::nullopt;
94101
}
95102

0 commit comments

Comments
 (0)