diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-03-16 23:04:06 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-03-16 23:04:06 +0000 |
commit | 73352811c004e87b80ef587e04403f5e91d98619 (patch) | |
tree | 30e0e81ec959e498c19f10fb744c1535b5fdb3b3 | |
parent | ebf8040e3931696d1bb371cc1b61679a62b888fb (diff) | |
parent | 9117ee5fde4d3033bf591d3b6dae642240aa9c21 (diff) | |
download | android_hardware_qcom_sdm845_display-73352811c004e87b80ef587e04403f5e91d98619.tar.gz android_hardware_qcom_sdm845_display-73352811c004e87b80ef587e04403f5e91d98619.tar.bz2 android_hardware_qcom_sdm845_display-73352811c004e87b80ef587e04403f5e91d98619.zip |
Snap for 6300693 from 9117ee5fde4d3033bf591d3b6dae642240aa9c21 to qt-qpr3-release
Change-Id: Iaa8c5ac1a240a8be1bce2e869cbbb7624a14f8bc
-rw-r--r-- | sdm/include/utils/constants.h | 6 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_display.cpp | 4 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_layers.cpp | 6 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_layers.h | 3 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_session.cpp | 8 |
5 files changed, 27 insertions, 0 deletions
diff --git a/sdm/include/utils/constants.h b/sdm/include/utils/constants.h index 5efe3571..608b192d 100644 --- a/sdm/include/utils/constants.h +++ b/sdm/include/utils/constants.h @@ -75,6 +75,12 @@ namespace sdm { const int kPageSize = 4096; const uint32_t kGridSize = 129; // size used for non-linear transformation before Tone-mapping const uint32_t kLutDim = 17; // Dim of the 3d LUT for tone-mapping. + constexpr int kColorTransformMatrixSize = 16; + constexpr float kIdentityMatrix[kColorTransformMatrixSize] = { 1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0 }; + typedef void * Handle; diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp index 45effc06..18923b03 100644 --- a/sdm/libs/hwc2/hwc_display.cpp +++ b/sdm/libs/hwc2/hwc_display.cpp @@ -707,6 +707,10 @@ void HWCDisplay::BuildLayerStack() { layer->flags.skip = true; } + if (hwc_layer->IsColorTransformSet()) { + layer->flags.skip = true; + } + // set default composition as GPU for SDM layer->composition = kCompositionGPU; diff --git a/sdm/libs/hwc2/hwc_layers.cpp b/sdm/libs/hwc2/hwc_layers.cpp index 9b08308c..eff1f80f 100644 --- a/sdm/libs/hwc2/hwc_layers.cpp +++ b/sdm/libs/hwc2/hwc_layers.cpp @@ -536,6 +536,12 @@ HWC2::Error HWCLayer::SetLayerZOrder(uint32_t z) { return HWC2::Error::None; } +HWC2::Error HWCLayer::SetLayerColorTransform(const float *matrix) { + color_transform_matrix_set_ = + (std::memcmp(matrix, kIdentityMatrix, sizeof(kIdentityMatrix)) != 0); + return HWC2::Error::None; +} + HWC2::Error HWCLayer::SetLayerPerFrameMetadata(uint32_t num_elements, const PerFrameMetadataKey *keys, const float *metadata) { diff --git a/sdm/libs/hwc2/hwc_layers.h b/sdm/libs/hwc2/hwc_layers.h index a24f5a44..ce3bd1f3 100644 --- a/sdm/libs/hwc2/hwc_layers.h +++ b/sdm/libs/hwc2/hwc_layers.h @@ -91,6 +91,7 @@ class HWCLayer { HWC2::Error SetLayerPerFrameMetadata(uint32_t num_elements, const PerFrameMetadataKey *keys, const float *metadata); HWC2::Error SetLayerZOrder(uint32_t z); + HWC2::Error SetLayerColorTransform(const float *matrix); void SetComposition(const LayerComposition &sdm_composition); HWC2::Composition GetClientRequestedCompositionType() { return client_requested_; } void UpdateClientCompositionType(HWC2::Composition type) { client_requested_ = type; } @@ -112,6 +113,7 @@ class HWCLayer { bool IsNonIntegralSourceCrop() { return non_integral_source_crop_; } bool HasMetaDataRefreshRate() { return has_metadata_refresh_rate_; } void SetPartialUpdate(bool enabled) { partial_update_enabled_ = enabled; } + bool IsColorTransformSet() const { return color_transform_matrix_set_; } private: Layer *layer_ = nullptr; @@ -131,6 +133,7 @@ class HWCLayer { bool has_metadata_refresh_rate_ = false; bool partial_update_enabled_ = false; bool surface_updated_ = true; + bool color_transform_matrix_set_ = false; // Composition requested by client(SF) HWC2::Composition client_requested_ = HWC2::Composition::Device; diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp index 259c2049..b35beb3b 100644 --- a/sdm/libs/hwc2/hwc_session.cpp +++ b/sdm/libs/hwc2/hwc_session.cpp @@ -850,6 +850,12 @@ static int32_t SetLayerZOrder(hwc2_device_t *device, hwc2_display_t display, hwc return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::SetLayerZOrder, layer, z); } +static int32_t SetLayerColorTransform(hwc2_device_t *device, hwc2_display_t display, + hwc2_layer_t layer, const float *matrix) { + return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerColorTransform, + matrix); +} + int32_t HWCSession::SetOutputBuffer(hwc2_device_t *device, hwc2_display_t display, buffer_handle_t buffer, int32_t releaseFence) { if (!device) { @@ -1112,6 +1118,8 @@ hwc2_function_pointer_t HWCSession::GetFunction(struct hwc2_device *device, return AsFP<HWC2_PFN_SET_LAYER_VISIBLE_REGION>(SetLayerVisibleRegion); case HWC2::FunctionDescriptor::SetLayerZOrder: return AsFP<HWC2_PFN_SET_LAYER_Z_ORDER>(SetLayerZOrder); + case HWC2::FunctionDescriptor::SetLayerColorTransform: + return AsFP<HWC2_PFN_SET_LAYER_COLOR_TRANSFORM>(SetLayerColorTransform); case HWC2::FunctionDescriptor::SetOutputBuffer: return AsFP<HWC2_PFN_SET_OUTPUT_BUFFER>(SetOutputBuffer); case HWC2::FunctionDescriptor::SetPowerMode: |