diff options
author | Pradosh Das <prados@codeaurora.org> | 2020-09-10 19:38:32 +0530 |
---|---|---|
committer | Pradosh Das <prados@codeaurora.org> | 2020-09-10 19:38:32 +0530 |
commit | dd01e83c7a3d9006071939cd1bcb3b037f62e172 (patch) | |
tree | 433d4586c682e453ebbd41f971648f43cbddef50 | |
parent | da46a8d302b53882a5f17ef598c82cd40e26930f (diff) | |
parent | 73e744e086040e404ed0aecdf622ea6b5600e750 (diff) |
Merge commit '73e744e086040e404ed0aecdf622ea6b5600e750' into HEAD
Change-Id: Ifb88b2335bbaf3f628b162c13485218cf68a020c
-rw-r--r-- | common.mk | 3 | ||||
-rw-r--r-- | config/display-product.mk | 6 | ||||
-rw-r--r-- | gralloc/QtiMapper4.h | 5 | ||||
-rw-r--r-- | gralloc/gr_buf_mgr.cpp | 10 | ||||
-rw-r--r-- | gralloc/gr_utils.cpp | 28 | ||||
-rw-r--r-- | libdrmutils/Android.mk | 3 | ||||
-rw-r--r-- | libdrmutils/drm_interface.h | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | libdrmutils/drm_master.cpp | 2 | ||||
-rw-r--r-- | sdm/libs/core/drm/hw_device_drm.h | 1 | ||||
-rw-r--r-- | sdm/libs/core/drm/hw_peripheral_drm.cpp | 27 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_display.cpp | 3 |
11 files changed, 66 insertions, 23 deletions
@@ -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(); |