summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPradosh Das <prados@codeaurora.org>2020-09-10 19:38:32 +0530
committerPradosh Das <prados@codeaurora.org>2020-09-10 19:38:32 +0530
commitdd01e83c7a3d9006071939cd1bcb3b037f62e172 (patch)
tree433d4586c682e453ebbd41f971648f43cbddef50
parentda46a8d302b53882a5f17ef598c82cd40e26930f (diff)
parent73e744e086040e404ed0aecdf622ea6b5600e750 (diff)
Merge commit '73e744e086040e404ed0aecdf622ea6b5600e750' into HEAD
Change-Id: Ifb88b2335bbaf3f628b162c13485218cf68a020c
-rw-r--r--common.mk3
-rw-r--r--config/display-product.mk6
-rw-r--r--gralloc/QtiMapper4.h5
-rw-r--r--gralloc/gr_buf_mgr.cpp10
-rw-r--r--gralloc/gr_utils.cpp28
-rw-r--r--libdrmutils/Android.mk3
-rw-r--r--libdrmutils/drm_interface.h1
-rwxr-xr-x[-rw-r--r--]libdrmutils/drm_master.cpp2
-rw-r--r--sdm/libs/core/drm/hw_device_drm.h1
-rw-r--r--sdm/libs/core/drm/hw_peripheral_drm.cpp27
-rw-r--r--sdm/libs/hwc2/hwc_display.cpp3
11 files changed, 66 insertions, 23 deletions
diff --git a/common.mk b/common.mk
index 0a372005..a30c0d9e 100644
--- a/common.mk
+++ b/common.mk
@@ -75,5 +75,6 @@ ifeq ($(TARGET_COMPILE_WITH_MSM_KERNEL),true)
# If the macro is not present, the headers are picked from hardware/qcom/msmXXXX
# failing which, they are picked from bionic.
common_deps += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
- kernel_includes += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+ kernel_includes += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \
+ $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include/display
endif
diff --git a/config/display-product.mk b/config/display-product.mk
index b9467fe3..a76dded4 100644
--- a/config/display-product.mk
+++ b/config/display-product.mk
@@ -116,6 +116,12 @@ PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.wcg_composition_dataspa
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.protected_contents=true
endif
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.force_hwc_copy_for_virtual_displays=true
+
+ifeq ($(TARGET_BOARD_PLATFORM),$(TRINKET))
+PRODUCT_PROPERTY_OVERRIDES += vendor.display.disable_excl_rect_partial_fb=1
+endif
+
ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
# Recovery is enabled, logging is enabled
PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/gralloc/QtiMapper4.h b/gralloc/QtiMapper4.h
index 3c5137fc..936393d4 100644
--- a/gralloc/QtiMapper4.h
+++ b/gralloc/QtiMapper4.h
@@ -267,7 +267,10 @@ class QtiMapper : public IQtiMapper {
{qtigralloc::MetadataType_AlignedHeightInPixels, "height in private_handle_t", true, false},
#ifdef METADATA_V2
{qtigralloc::MetadataType_StandardMetadataStatus, "Is standard metadata set", true, false},
- {qtigralloc::MetadataType_VendorMetadataStatus, "Is vendor metadata set", true, false}
+ {qtigralloc::MetadataType_VendorMetadataStatus, "Is vendor metadata set", true, false},
+#endif
+#ifdef QTI_BUFFER_TYPE
+ {qtigralloc::MetadataType_BufferType, "Buffer type from private_handle_t", true, false},
#endif
};
};
diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp
index e78ba2ee..825d20be 100644
--- a/gralloc/gr_buf_mgr.cpp
+++ b/gralloc/gr_buf_mgr.cpp
@@ -1392,6 +1392,12 @@ Error BufferManager::GetMetadata(private_handle_t *handle, int64_t metadatatype_
qtigralloc::encodeMetadataState(metadata->isVendorMetadataSet, out);
break;
#endif
+#ifdef QTI_BUFFER_TYPE
+ case QTI_BUFFER_TYPE:
+ android::gralloc4::encodeUint32(qtigralloc::MetadataType_BufferType, handle->buffer_type,
+ out);
+ break;
+#endif
default:
error = Error::UNSUPPORTED;
}
@@ -1423,7 +1429,7 @@ Error BufferManager::SetMetadata(private_handle_t *handle, int64_t metadatatype_
// Reset to false for special cases below
if (IS_VENDOR_METADATA_TYPE(metadatatype_value)) {
metadata->isVendorMetadataSet[GET_VENDOR_METADATA_STATUS_INDEX(metadatatype_value)] = true;
- } else {
+ } else if (GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value) < METADATA_SET_SIZE) {
metadata->isStandardMetadataSet[GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value)] = true;
}
#endif
@@ -1600,7 +1606,7 @@ Error BufferManager::SetMetadata(private_handle_t *handle, int64_t metadatatype_
#ifdef METADATA_V2
if (IS_VENDOR_METADATA_TYPE(metadatatype_value)) {
metadata->isVendorMetadataSet[GET_VENDOR_METADATA_STATUS_INDEX(metadatatype_value)] = false;
- } else {
+ } else if (GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value) < METADATA_SET_SIZE) {
metadata->isStandardMetadataSet[GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value)] =
false;
}
diff --git a/gralloc/gr_utils.cpp b/gralloc/gr_utils.cpp
index 312058ed..98e60e2c 100644
--- a/gralloc/gr_utils.cpp
+++ b/gralloc/gr_utils.cpp
@@ -658,6 +658,9 @@ int GetRawPlaneInfo(int32_t format, int32_t width, int32_t height, PlaneLayoutIn
plane_info[0].step = step;
plane_info[0].stride = width;
plane_info[0].stride_bytes = static_cast<int32_t>(alignedWidth);
+ if (format == HAL_PIXEL_FORMAT_RAW16) {
+ plane_info[0].stride_bytes = static_cast<int32_t>(alignedWidth * GetBpp(format));
+ }
plane_info[0].scanlines = height;
plane_info[0].size = size;
@@ -756,6 +759,9 @@ void GetYuvUBwcWidthAndHeight(int width, int height, int format, unsigned int *a
switch (format) {
case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ *aligned_w = VENUS_Y_STRIDE(COLOR_FMT_NV12, width);
+ *aligned_h = VENUS_Y_SCANLINES(COLOR_FMT_NV12, height);
+ break;
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
*aligned_w = VENUS_Y_STRIDE(COLOR_FMT_NV12_UBWC, width);
*aligned_h = VENUS_Y_SCANLINES(COLOR_FMT_NV12_UBWC, height);
@@ -839,8 +845,20 @@ unsigned int GetUBwcSize(int width, int height, int format, unsigned int aligned
size = alignedw * alignedh * bpp;
size += GetRgbUBwcMetaBufferSize(width, height, bpp);
break;
+ /*
+ * 1. The CtsMediaV2TestCases#CodecEncoderSurfaceTest is a transcode use case and shares
+ * same surface between encoder and decoder.
+ * 2. Configures encoder with Opaque color format thus encoder sets ubwc usage bits and
+ * is configured with NV12_UBWC format.
+ * 3. Configures decoder as 'flexible', thus configuring decoder with NV12 format.
+ * 4. Decoder should produce output to surface that will be fed back to encoder as input.
+ * 5. Though UBWC is enabled, we need to compute the actual buffer size (including aligned
+ * width and height) based on pixel format that is set.
+ */
case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ size = VENUS_BUFFER_SIZE(COLOR_FMT_NV12, width, height);
+ break;
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
size = VENUS_BUFFER_SIZE(COLOR_FMT_NV12_UBWC, width, height);
break;
@@ -1011,6 +1029,16 @@ void GetAlignedWidthAndHeight(const BufferInfo &info, unsigned int *alignedw,
aligned_w = ALIGN(width, 128);
break;
case HAL_PIXEL_FORMAT_YV12:
+ if ((usage & BufferUsage::GPU_TEXTURE) || (usage & BufferUsage::GPU_RENDER_TARGET)) {
+ if (AdrenoMemInfo::GetInstance() == nullptr) {
+ return;
+ }
+ alignment = AdrenoMemInfo::GetInstance()->GetGpuPixelAlignment();
+ aligned_w = ALIGN(width, alignment);
+ } else {
+ aligned_w = ALIGN(width, 16);
+ }
+ break;
case HAL_PIXEL_FORMAT_YCbCr_422_SP:
case HAL_PIXEL_FORMAT_YCrCb_422_SP:
case HAL_PIXEL_FORMAT_YCbCr_422_I:
diff --git a/libdrmutils/Android.mk b/libdrmutils/Android.mk
index 172233f9..e448d4f5 100644
--- a/libdrmutils/Android.mk
+++ b/libdrmutils/Android.mk
@@ -5,7 +5,8 @@ LOCAL_MODULE := libdrmutils
LOCAL_VENDOR_MODULE := true
LOCAL_MODULE_TAGS := optional
LOCAL_C_INCLUDES := external/libdrm \
- $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+ $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \
+ $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include/display
LOCAL_HEADER_LIBRARIES := display_headers
LOCAL_SHARED_LIBRARIES := libdrm libdl libdisplaydebug
LOCAL_CFLAGS := -DLOG_TAG=\"DRMUTILS\" -Wall -Werror -fno-operator-names
diff --git a/libdrmutils/drm_interface.h b/libdrmutils/drm_interface.h
index 918a7fec..5d27b4e6 100644
--- a/libdrmutils/drm_interface.h
+++ b/libdrmutils/drm_interface.h
@@ -40,6 +40,7 @@
#include "xf86drmMode.h"
#include <drm/msm_drm.h>
#include <drm/msm_drm_pp.h>
+#include <drm/sde_drm.h>
namespace sde_drm {
diff --git a/libdrmutils/drm_master.cpp b/libdrmutils/drm_master.cpp
index f0d14b1b..3a8516d4 100644..100755
--- a/libdrmutils/drm_master.cpp
+++ b/libdrmutils/drm_master.cpp
@@ -33,6 +33,8 @@
#include <unistd.h>
#include <xf86drm.h>
#include <xf86drmMode.h>
+#include <drm/sde_drm.h>
+
// Intentionally included after xf86 headers so that they in-turn include libdrm version of drm.h
// that doesn't use keyword "virtual" for a variable name. Not doing so leads to the kernel version
// of drm.h being included causing compilation to fail
diff --git a/sdm/libs/core/drm/hw_device_drm.h b/sdm/libs/core/drm/hw_device_drm.h
index 5933347c..c4a330ac 100644
--- a/sdm/libs/core/drm/hw_device_drm.h
+++ b/sdm/libs/core/drm/hw_device_drm.h
@@ -231,7 +231,6 @@ class HWDeviceDRM : public HWInterface {
uint32_t cmd_mode_index_ = 0;
bool switch_mode_valid_ = false;
bool doze_poms_switch_done_ = false;
- bool pending_poms_switch_ = false;
bool active_ = false;
DRMPowerMode last_power_mode_ = DRMPowerMode::OFF;
bool pending_doze_ = false;
diff --git a/sdm/libs/core/drm/hw_peripheral_drm.cpp b/sdm/libs/core/drm/hw_peripheral_drm.cpp
index 85ec982f..6b3faeb5 100644
--- a/sdm/libs/core/drm/hw_peripheral_drm.cpp
+++ b/sdm/libs/core/drm/hw_peripheral_drm.cpp
@@ -105,7 +105,7 @@ DisplayError HWPeripheralDRM::SetDynamicDSIClock(uint64_t bit_clk_rate) {
return kErrorNotSupported;
}
- if (doze_poms_switch_done_ || pending_poms_switch_) {
+ if (doze_poms_switch_done_) {
return kErrorNotSupported;
}
@@ -124,7 +124,7 @@ DisplayError HWPeripheralDRM::GetDynamicDSIClock(uint64_t *bit_clk_rate) {
DisplayError HWPeripheralDRM::SetRefreshRate(uint32_t refresh_rate) {
- if (doze_poms_switch_done_ || pending_poms_switch_) {
+ if (doze_poms_switch_done_) {
// poms switch in progress
// Defer any refresh rate setting.
return kErrorNotSupported;
@@ -139,7 +139,7 @@ DisplayError HWPeripheralDRM::SetRefreshRate(uint32_t refresh_rate) {
}
DisplayError HWPeripheralDRM::SetDisplayMode(const HWDisplayMode hw_display_mode) {
- if (doze_poms_switch_done_ || pending_poms_switch_) {
+ if (doze_poms_switch_done_) {
return kErrorNotSupported;
}
@@ -182,13 +182,6 @@ DisplayError HWPeripheralDRM::Commit(HWLayers *hw_layers) {
synchronous_commit_ = false;
active_ = true;
- if (pending_poms_switch_) {
- HWDeviceDRM::SetDisplayMode(kModeCommand);
- hw_panel_info_.bitclk_rates = bitclk_rates_;
- doze_poms_switch_done_ = true;
- pending_poms_switch_ = false;
- }
-
idle_pc_state_ = sde_drm::DRMIdlePCState::NONE;
return error;
@@ -512,7 +505,6 @@ DisplayError HWPeripheralDRM::PowerOn(const HWQosData &qos_data, int *release_fe
}
idle_pc_state_ = sde_drm::DRMIdlePCState::NONE;
idle_pc_enabled_ = true;
- pending_poms_switch_ = false;
active_ = true;
return kErrorNone;
@@ -526,7 +518,6 @@ DisplayError HWPeripheralDRM::PowerOff(bool teardown) {
return err;
}
- pending_poms_switch_ = false;
active_ = false;
return kErrorNone;
@@ -535,6 +526,7 @@ DisplayError HWPeripheralDRM::PowerOff(bool teardown) {
DisplayError HWPeripheralDRM::Doze(const HWQosData &qos_data, int *release_fence) {
DTRACE_SCOPED();
+ bool pending_poms_switch = false;
if (!first_cycle_ && switch_mode_valid_ && !doze_poms_switch_done_ &&
(current_mode_index_ == video_mode_index_)) {
if (active_) {
@@ -542,7 +534,7 @@ DisplayError HWPeripheralDRM::Doze(const HWQosData &qos_data, int *release_fence
hw_panel_info_.bitclk_rates = bitclk_rates_;
doze_poms_switch_done_ = true;
} else {
- pending_poms_switch_ = true;
+ pending_poms_switch = true;
}
}
@@ -551,6 +543,12 @@ DisplayError HWPeripheralDRM::Doze(const HWQosData &qos_data, int *release_fence
return err;
}
+ if (pending_poms_switch) {
+ HWDeviceDRM::SetDisplayMode(kModeCommand);
+ hw_panel_info_.bitclk_rates = bitclk_rates_;
+ doze_poms_switch_done_ = true;
+ }
+
if (first_cycle_) {
active_ = true;
}
@@ -573,14 +571,13 @@ DisplayError HWPeripheralDRM::DozeSuspend(const HWQosData &qos_data, int *releas
return err;
}
- pending_poms_switch_ = false;
active_ = true;
return kErrorNone;
}
DisplayError HWPeripheralDRM::SetDisplayAttributes(uint32_t index) {
- if (doze_poms_switch_done_ || pending_poms_switch_) {
+ if (doze_poms_switch_done_) {
return kErrorNotSupported;
}
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
index 3eb900d6..a4b83441 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -1165,8 +1165,7 @@ HWC2::Error HWCDisplay::SetClientTarget(buffer_handle_t target, int32_t acquire_
}
if (acquire_fence == 0) {
- DLOGW("acquire_fence is zero");
- return HWC2::Error::BadParameter;
+ DLOGV_IF(kTagClient, "Re-using cached buffer");
}
Layer *sdm_layer = client_target_->GetSDMLayer();