summaryrefslogtreecommitdiff
path: root/sdm/libs/hwc2/hwc_display.cpp
diff options
context:
space:
mode:
authorVarun Arora <varuaror@codeaurora.org>2019-02-07 14:25:28 -0800
committerVarun Arora <varuaror@codeaurora.org>2019-02-07 14:25:28 -0800
commitfa90e204a7f95300e1b50a2949b13c7748a62a88 (patch)
tree6f3c71c42917adcb8d68e4d1e75a3d7be2fcf9e2 /sdm/libs/hwc2/hwc_display.cpp
parentb18d78f17059dd961c8f70403d9eb519360c6034 (diff)
parent467f45c2ca4e5fb076729adb310a352dc1f15928 (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.cpp33
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