diff options
author | Varun Arora <varuaror@codeaurora.org> | 2019-02-07 14:25:28 -0800 |
---|---|---|
committer | Varun Arora <varuaror@codeaurora.org> | 2019-02-07 14:25:28 -0800 |
commit | fa90e204a7f95300e1b50a2949b13c7748a62a88 (patch) | |
tree | 6f3c71c42917adcb8d68e4d1e75a3d7be2fcf9e2 /sdm/libs/hwc2/hwc_display.cpp | |
parent | b18d78f17059dd961c8f70403d9eb519360c6034 (diff) | |
parent | 467f45c2ca4e5fb076729adb310a352dc1f15928 (diff) |
Merge remote-tracking branch 'quic/display.lnx.5.0' into tip
2/7/2019 FF
Change-Id: I78cdd49ab0f4da7ec24e9009ee5dd2cf0cb94ada
CRs-Fixed: 2395201
Diffstat (limited to 'sdm/libs/hwc2/hwc_display.cpp')
-rw-r--r-- | sdm/libs/hwc2/hwc_display.cpp | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp index 0e2e1177..d49da4c5 100644 --- a/sdm/libs/hwc2/hwc_display.cpp +++ b/sdm/libs/hwc2/hwc_display.cpp @@ -802,6 +802,9 @@ void HWCDisplay::BuildLayerStack() { // Append client target to the layer stack Layer *sdm_client_target = client_target_->GetSDMLayer(); sdm_client_target->flags.updating = IsLayerUpdating(client_target_); + // Derive client target dataspace based on the color mode - bug/115482728 + int32_t client_target_dataspace = GetDataspaceFromColorMode(GetCurrentColorMode()); + SetClientTargetDataSpace(client_target_dataspace); layer_stack_.layers.push_back(sdm_client_target); // fall back frame composition to GPU when client target is 10bit @@ -826,7 +829,7 @@ void HWCDisplay::BuildSolidFillStack() { HWC2::Error HWCDisplay::SetLayerZOrder(hwc2_layer_t layer_id, uint32_t z) { const auto map_layer = layer_map_.find(layer_id); if (map_layer == layer_map_.end()) { - DLOGE("[%" PRIu64 "] updateLayerZ failed to find layer", id_); + DLOGW("[%" PRIu64 "] updateLayerZ failed to find layer", id_); return HWC2::Error::BadLayer; } @@ -1154,12 +1157,11 @@ HWC2::Error HWCDisplay::SetClientTarget(buffer_handle_t target, int32_t acquire_ Layer *sdm_layer = client_target_->GetSDMLayer(); sdm_layer->frame_rate = std::min(current_refresh_rate_, HWCDisplay::GetThrottlingRefreshRate()); client_target_->SetLayerSurfaceDamage(damage); - if (client_target_->GetLayerDataspace() != dataspace) { - client_target_->SetLayerDataspace(dataspace); - Layer *sdm_layer = client_target_->GetSDMLayer(); - // Data space would be validated at GetClientTargetSupport, so just use here. - sdm::GetSDMColorSpace(client_target_->GetLayerDataspace(), - &sdm_layer->input_buffer.color_metadata); + int translated_dataspace = TranslateFromLegacyDataspace(dataspace); + if (client_target_->GetLayerDataspace() != translated_dataspace) { + DLOGW("New Dataspace = %d not matching Dataspace from color mode = %d", + translated_dataspace, client_target_->GetLayerDataspace()); + return HWC2::Error::BadParameter; } client_target_->SetLayerBuffer(target, acquire_fence); @@ -1847,11 +1849,6 @@ int HWCDisplay::SetDisplayStatus(DisplayStatus display_status) { return -EINVAL; } - if (display_status == kDisplayStatusResume || display_status == kDisplayStatusPause) { - callbacks_->Refresh(HWC_DISPLAY_PRIMARY); - validated_ = false; - } - return status; } @@ -2305,4 +2302,16 @@ void HWCDisplay::UpdateRefreshRate() { } } +int32_t HWCDisplay::SetClientTargetDataSpace(int32_t dataspace) { + if (client_target_->GetLayerDataspace() != dataspace) { + client_target_->SetLayerDataspace(dataspace); + Layer *sdm_layer = client_target_->GetSDMLayer(); + // Data space would be validated at GetClientTargetSupport, so just use here. + sdm::GetSDMColorSpace(client_target_->GetLayerDataspace(), + &sdm_layer->input_buffer.color_metadata); + } + + return 0; +} + } // namespace sdm |