sdm: Add support for HWC2_ATTRIBUTE_CONFIG_GROUP
Add support for HWC2_ATTRIBUTE_CONFIG_GROUP display attribute.
Change-Id: I2000747023da237053aa29bd8645575ab4e924f3
diff --git a/sdm/include/core/display_interface.h b/sdm/include/core/display_interface.h
index 080afcb..458ff18 100644
--- a/sdm/include/core/display_interface.h
+++ b/sdm/include/core/display_interface.h
@@ -198,14 +198,22 @@
@sa DisplayInterface::GetConfig
@sa DisplayInterface::SetConfig
*/
-struct DisplayConfigVariableInfo {
+struct DisplayConfigGroupInfo {
uint32_t x_pixels = 0; //!< Total number of pixels in X-direction on the display panel.
uint32_t y_pixels = 0; //!< Total number of pixels in Y-direction on the display panel.
float x_dpi = 0.0f; //!< Dots per inch in X-direction.
float y_dpi = 0.0f; //!< Dots per inch in Y-direction.
+ bool is_yuv = false; //!< If the display output is in YUV format.
+
+ bool operator==(const DisplayConfigGroupInfo& info) const {
+ return ((x_pixels == info.x_pixels) && (y_pixels == info.y_pixels) && (x_dpi == info.x_dpi) &&
+ (y_dpi == info.y_dpi) && (is_yuv == info.is_yuv));
+ }
+};
+
+struct DisplayConfigVariableInfo : public DisplayConfigGroupInfo {
uint32_t fps = 0; //!< Frame rate per second.
uint32_t vsync_period_ns = 0; //!< VSync period in nanoseconds.
- bool is_yuv = false; //!< If the display output is in YUV format.
bool operator==(const DisplayConfigVariableInfo& info) const {
return ((x_pixels == info.x_pixels) && (y_pixels == info.y_pixels) && (x_dpi == info.x_dpi) &&
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
index 7b9e36b..238b1d0 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -1055,6 +1055,9 @@
case HWC2::Attribute::DpiY:
*out_value = INT32(variable_config.y_dpi * 1000.0f);
break;
+ case HWC2::Attribute::ConfigGroup:
+ *out_value = GetDisplayConfigGroupId(variable_config);
+ break;
default:
DLOGW("Spurious attribute type = %s", to_string(attribute).c_str());
*out_value = -1;
@@ -2424,4 +2427,15 @@
pending_config_ = false;
}
+int32_t HWCDisplay::GetDisplayConfigGroupId(const DisplayConfigGroupInfo &variable_config) {
+ for (auto &config : variable_config_map_) {
+ DisplayConfigGroupInfo const &group_info = config.second;
+ if (group_info == variable_config) {
+ return INT32(config.first);
+ }
+ }
+
+ return -1;
+}
+
} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_display.h b/sdm/libs/hwc2/hwc_display.h
index e3eae09..ee060e9 100644
--- a/sdm/libs/hwc2/hwc_display.h
+++ b/sdm/libs/hwc2/hwc_display.h
@@ -376,6 +376,7 @@
uint32_t SanitizeRefreshRate(uint32_t req_refresh_rate);
virtual void GetUnderScanConfig() { }
int32_t SetClientTargetDataSpace(int32_t dataspace);
+ int32_t GetDisplayConfigGroupId(const DisplayConfigGroupInfo &variable_config);
enum {
INPUT_LAYER_DUMP,
diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
index 87ded3a..80d02fe 100644
--- a/sdm/libs/hwc2/hwc_session.cpp
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -691,7 +691,7 @@
hwc2_config_t config, int32_t int_attribute,
int32_t *out_value) {
if (out_value == nullptr || int_attribute < HWC2_ATTRIBUTE_INVALID ||
- int_attribute > HWC2_ATTRIBUTE_DPI_Y) {
+ int_attribute > HWC2_ATTRIBUTE_CONFIG_GROUP) {
return HWC2_ERROR_BAD_PARAMETER;
}
auto attribute = static_cast<HWC2::Attribute>(int_attribute);