diff options
author | Yichi Chen <yichichen@google.com> | 2020-03-13 06:51:16 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-03-13 06:51:16 +0000 |
commit | 98f20382053f0deae461989145ce9dc5e209ae6c (patch) | |
tree | 6c5e07f8d610d2244d9553ef1120b2905dc31bdb | |
parent | 4bb89193b9d646b8037e0a9b2ca3803693d4ee3d (diff) | |
parent | 3a977feec92805adf94199ea6c558702de525d37 (diff) | |
download | display-98f20382053f0deae461989145ce9dc5e209ae6c.tar.gz |
Merge "sdm: Add support of SetLayerColorTransform with GL composition fallback" into qt-qpr1-dev
-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 ffa8d12b..f97f5397 100644 --- a/sdm/include/utils/constants.h +++ b/sdm/include/utils/constants.h @@ -79,6 +79,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 597ade14..ab937b9c 100644 --- a/sdm/libs/hwc2/hwc_display.cpp +++ b/sdm/libs/hwc2/hwc_display.cpp @@ -674,6 +674,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 f288a3d9..49900877 100644 --- a/sdm/libs/hwc2/hwc_layers.cpp +++ b/sdm/libs/hwc2/hwc_layers.cpp @@ -545,6 +545,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 538f4df3..9b4730d6 100644 --- a/sdm/libs/hwc2/hwc_layers.h +++ b/sdm/libs/hwc2/hwc_layers.h @@ -94,6 +94,7 @@ class HWCLayer { HWC2::Error SetLayerPerFrameMetadataBlobs(uint32_t num_elements, const PerFrameMetadataKey *keys, const uint32_t *sizes, const uint8_t* 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_; } HWC2::Composition GetOrigClientRequestedCompositionType() { return client_requested_orig_; } @@ -116,6 +117,7 @@ class HWCLayer { void SetPartialUpdate(bool enabled) { partial_update_enabled_ = enabled; } bool IsNonIntegralSourceCrop() { return non_integral_source_crop_; } bool HasMetaDataRefreshRate() { return has_metadata_refresh_rate_; } + bool IsColorTransformSet() const { return color_transform_matrix_set_; } void SetLayerAsMask(); bool BufferLatched() { return buffer_flipped_; } void ResetBufferFlip() { buffer_flipped_ = false; } @@ -138,6 +140,7 @@ class HWCLayer { bool surface_updated_ = true; bool non_integral_source_crop_ = false; bool has_metadata_refresh_rate_ = false; + bool color_transform_matrix_set_ = false; bool buffer_flipped_ = false; bool per_frame_hdr_metadata_ = false; // used to track if perframe metadata and blob is set. diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp index 11f9b0a2..5e41d253 100644 --- a/sdm/libs/hwc2/hwc_session.cpp +++ b/sdm/libs/hwc2/hwc_session.cpp @@ -1002,6 +1002,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) { @@ -1234,6 +1240,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: |