diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-08-28 07:34:22 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-08-28 07:34:22 +0000 |
commit | 2029ee70a6de79cac7ddc5277f6e4352bcb21da6 (patch) | |
tree | 6306c5b4c7425423299d93c2fef1316bfbb15759 | |
parent | fbfda3ae5c4d92b799c7fc621f1ab805e6560af5 (diff) | |
parent | a79125844f52e3d9c01f896b3eacc229b9978bb8 (diff) | |
download | drm_hwcomposer-2029ee70a6de79cac7ddc5277f6e4352bcb21da6.tar.gz |
release-request-c924aaac-f0a2-4215-8dc4-e314f22460d9-for-git_oc-mr1-release-4301796 snap-temp-L23200000097143969
Change-Id: I988047b7aed1281ac45721842bb0f65ebb647810
-rw-r--r-- | platformnv.cpp | 15 | ||||
-rw-r--r-- | platformnv.h | 2 |
2 files changed, 14 insertions, 3 deletions
diff --git a/platformnv.cpp b/platformnv.cpp index 9ea1467..ca65e72 100644 --- a/platformnv.cpp +++ b/platformnv.cpp @@ -275,7 +275,7 @@ int PlanStageProtectedRotated::ProvisionPlanes( return 0; } -bool PlanStageNvLimits::CheckLayer(DrmHwcLayer *layer) { +bool PlanStageNvLimits::CheckLayer(size_t zorder, DrmHwcLayer *layer) { auto src_w = layer->source_crop.width(); auto src_h = layer->source_crop.height(); auto dst_w = layer->display_frame.width(); @@ -284,6 +284,17 @@ bool PlanStageNvLimits::CheckLayer(DrmHwcLayer *layer) { int v_limit; switch (layer->buffer->format) { + case DRM_FORMAT_ARGB8888: + case DRM_FORMAT_ABGR8888: + case DRM_FORMAT_XBGR8888: + // tegra driver assumes any layer with alpha channel has premult + // blending, avoid handling it this is not the case. This is not an + // issue for bottom-most layer since there's nothing to blend with + if (zorder > 0 && layer->blending != DrmHwcBlending::kPreMult) + return false; + + v_limit = 2; + break; case DRM_FORMAT_YVU420: case DRM_FORMAT_BGR565: v_limit = 4; @@ -312,7 +323,7 @@ int PlanStageNvLimits::ProvisionPlanes( for (auto i = layers.begin(); i != layers.end();) { // Skip layer if supported - if (CheckLayer(i->second)) { + if (CheckLayer(i->first, i->second)) { i++; continue; } diff --git a/platformnv.h b/platformnv.h index df2a242..e379ea9 100644 --- a/platformnv.h +++ b/platformnv.h @@ -82,7 +82,7 @@ class PlanStageNvLimits : public Planner::PlanStage { std::map<size_t, DrmHwcLayer *> &layers, DrmCrtc *crtc, std::vector<DrmPlane *> *planes); protected: - bool CheckLayer(DrmHwcLayer *layer); + bool CheckLayer(size_t zorder, DrmHwcLayer *layer); }; } |