drm_hwcomposer: Rework HWC frontends buffer management
Change summary:
- Use BufferInfo instead of native_buffer to configure the HwcLayer.
- Extend buffer properties with slot info.
- Provide fence and active slot ID separate from the buffer.
- Move swapchain tracking into HWC2. HWC3 doesn't need that.
Why:
- Support more flexible resource management control from the frontend
side, which is required by HWC3 API.
- Move more Android-specific data types to the frontend module.
Change-Id: Idaa4c552f600f78d6f0ad21997cfa7f3a6c6cbd8
Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
diff --git a/hwc2_device/HwcDisplay.cpp b/hwc2_device/HwcDisplay.cpp
index da40416..252276f 100644
--- a/hwc2_device/HwcDisplay.cpp
+++ b/hwc2_device/HwcDisplay.cpp
@@ -262,7 +262,19 @@
if (modeset_buffer != nullptr) {
auto modeset_layer = std::make_unique<HwcLayer>(this);
HwcLayer::LayerProperties properties;
- properties.buffer = {.buffer_handle = modeset_buffer};
+ auto bi = BufferInfoGetter::GetInstance()->GetBoInfo(modeset_buffer);
+ if (!bi) {
+ ALOGE("Failed to get buffer info for modeset buffer.");
+ return ConfigError::kBadConfig;
+ }
+ properties.slot_buffer = {
+ .slot_id = 0,
+ .bi = bi,
+ };
+ properties.active_slot = {
+ .slot_id = 0,
+ .fence = {},
+ };
properties.blend_mode = BufferBlendMode::kNone;
modeset_layer->SetLayerProperties(properties);
modeset_layer->PopulateLayerData();
@@ -422,7 +434,7 @@
vsync_worker_ = {};
}
- client_layer_.SwChainClearCache();
+ client_layer_.ClearSlots();
}
HWC2::Error HwcDisplay::Init() {