diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp index 069be090..ef44ed5b 100644 --- a/sdm/libs/hwc2/hwc_display.cpp +++ b/sdm/libs/hwc2/hwc_display.cpp @@ -397,6 +397,7 @@ HWC2::Error HWCDisplay::CreateLayer(hwc2_layer_t *out_layer_id) { HWCLayer *layer = *layer_set_.emplace(new HWCLayer(id_, buffer_allocator_)); layer_map_.emplace(std::make_pair(layer->GetId(), layer)); *out_layer_id = layer->GetId(); + validated_ = false; geometry_changes_ |= GeometryChanges::kAdded; return HWC2::Error::None; } @@ -427,6 +428,7 @@ HWC2::Error HWCDisplay::DestroyLayer(hwc2_layer_t layer_id) { break; } } + validated_ = false; geometry_changes_ |= GeometryChanges::kRemoved; return HWC2::Error::None; @@ -583,6 +585,7 @@ HWC2::Error HWCDisplay::SetLayerZOrder(hwc2_layer_t layer_id, uint32_t z) { DLOGE("[%" PRIu64 "] updateLayerZ failed to find layer", id_); return HWC2::Error::BadLayer; } + validated_ = false; const auto layer = map_layer->second; const auto z_range = layer_set_.equal_range(layer); diff --git a/sdm/libs/hwc2/hwc_display.h b/sdm/libs/hwc2/hwc_display.h index a3758314..1b04c849 100644 --- a/sdm/libs/hwc2/hwc_display.h +++ b/sdm/libs/hwc2/hwc_display.h @@ -137,6 +137,18 @@ class HWCDisplay : public DisplayEventHandler { virtual int GetDisplayConfigCount(uint32_t *count); virtual int GetDisplayAttributesForConfig(int config, DisplayConfigVariableInfo *display_attributes); + template + int32_t CallLayerFunction(hwc2_layer_t layer, HWC2::Error (HWCLayer::*member)(Args... ), + Args... args) { + auto status = HWC2::Error::BadLayer; + validated_ = false; + auto hwc_layer = GetHWCLayer(layer); + if (hwc_layer != nullptr) { + status = (hwc_layer->*member)(std::forward(args)...); + } + + return INT32(status); + } int SetPanelBrightness(int level); int GetPanelBrightness(int *level); diff --git a/sdm/libs/hwc2/hwc_session.h b/sdm/libs/hwc2/hwc_session.h index 87d41d73..7d31a3af 100644 --- a/sdm/libs/hwc2/hwc_session.h +++ b/sdm/libs/hwc2/hwc_session.h @@ -70,15 +70,11 @@ class HWCSession : hwc2_device_t, public qClient::BnQClient { } HWCSession *hwc_session = static_cast(device); - auto status = HWC2::Error::BadDisplay; + int32_t status = INT32(HWC2::Error::BadDisplay); if (hwc_session->hwc_display_[display]) { - status = HWC2::Error::BadLayer; - auto hwc_layer = hwc_session->hwc_display_[display]->GetHWCLayer(layer); - if (hwc_layer != nullptr) { - status = (hwc_layer->*member)(std::forward(args)...); - } + status = hwc_session->hwc_display_[display]->CallLayerFunction(layer, member, args...); } - return INT32(status); + return status; } // HWC2 Functions that require a concrete implementation in hwc session