summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGowtham Tammana2017-12-20 13:59:35 -0600
committerGowtham Tammana2017-12-20 15:00:04 -0600
commit6f7cbd247b61f608c1b99a9e47eba2339f5d2775 (patch)
tree38babe6c9b110c382292ff58f0df7153285828fb
parent663c365b08c091fcee7a8865cf02b9b3b80e3aab (diff)
downloadandroid-hardware-ti-dra7xx-6f7cbd247b61f608c1b99a9e47eba2339f5d2775.tar.gz
android-hardware-ti-dra7xx-6f7cbd247b61f608c1b99a9e47eba2339f5d2775.tar.xz
android-hardware-ti-dra7xx-6f7cbd247b61f608c1b99a9e47eba2339f5d2775.zip
hwc: Enable single layer NV12 DSS composition
In the case of single NV12 layer, assign it to overlay plane and setup primary plane with a dummy buffer. Change-Id: Ib951621f5a7ed04616e32f8193d91183548a3dbc Signed-off-by: Gowtham Tammana <g-tammana@ti.com>
-rw-r--r--hwcomposer/display.c17
-rw-r--r--hwcomposer/hwc.c11
2 files changed, 25 insertions, 3 deletions
diff --git a/hwcomposer/display.c b/hwcomposer/display.c
index 7641098..b58d3f9 100644
--- a/hwcomposer/display.c
+++ b/hwcomposer/display.c
@@ -320,6 +320,9 @@ bool can_dss_render_all_layers(omap_hwc_device_t *hwc_dev, int disp)
320 if (disp) 320 if (disp)
321 return false; 321 return false;
322 322
323 if (!display->disp_link.is_crtc_set)
324 return false;
325
323 if (layer_stats->bgr) 326 if (layer_stats->bgr)
324 return false; 327 return false;
325 328
@@ -1204,6 +1207,20 @@ static int display_configure_pipes(display_t *display)
1204 } 1207 }
1205 } 1208 }
1206 } 1209 }
1210 if (comp->used_ovls == 1 && display->layer_stats.nv12) {
1211 plane_info = &comp->plane_info[comp->ovl_indices[1]];
1212 plane_info->crtc_w = kdisp->dummy_fb.width;
1213 plane_info->crtc_h = kdisp->dummy_fb.height;
1214 plane_info->src_w = kdisp->dummy_fb.width;
1215 plane_info->src_h = kdisp->dummy_fb.height;
1216 plane_info->zorder = 0;
1217 err = set_plane_properties(kdisp->atomic_req,
1218 plane_info, &kdisp->dummy_fb);
1219 if (err) {
1220 ALOGE("Failed to configure pipe with dummy fb (%s)",
1221 strerror(err));
1222 }
1223 }
1207 return err; 1224 return err;
1208} 1225}
1209 1226
diff --git a/hwcomposer/hwc.c b/hwcomposer/hwc.c
index be7a829..532a159 100644
--- a/hwcomposer/hwc.c
+++ b/hwcomposer/hwc.c
@@ -160,7 +160,7 @@ static void hwc_check_dss_composition(omap_hwc_device_t *hwc_dev, int disp)
160 hwc_layer_1_t *layer = NULL; 160 hwc_layer_1_t *layer = NULL;
161 uint32_t i, j; 161 uint32_t i, j;
162 162
163 if (disp || list->numHwLayers <= 2 || comp->use_blitter) 163 if (disp || list->numHwLayers == 1 || comp->use_blitter)
164 return; 164 return;
165 165
166 if (!property_get_bool("persist.hwc.dss.comp", 1)) 166 if (!property_get_bool("persist.hwc.dss.comp", 1))
@@ -254,8 +254,13 @@ static int hwc_prepare_for_display(omap_hwc_device_t *hwc_dev, int disp)
254 /* GFX pipe cannot handle NV12, swap out if layer[0] is NV12, 254 /* GFX pipe cannot handle NV12, swap out if layer[0] is NV12,
255 * assuming second is non-NV12. FIXME 255 * assuming second is non-NV12. FIXME
256 */ 256 */
257 adjust_drm_plane_to_layer(&list->hwLayers[0], 0, &comp->plane_info[1]); 257 if (comp->used_ovls > 1) {
258 adjust_drm_plane_to_layer(&list->hwLayers[1], 1, &comp->plane_info[0]); 258 adjust_drm_plane_to_layer(&list->hwLayers[0], 0, &comp->plane_info[1]);
259 adjust_drm_plane_to_layer(&list->hwLayers[1], 1, &comp->plane_info[0]);
260 } else {
261 adjust_drm_plane_to_layer(&list->hwLayers[0], 1, &comp->plane_info[1]);
262 reset_drm_plane(&comp->plane_info[0]);
263 }
259 comp->ovl_indices[0] = 1; 264 comp->ovl_indices[0] = 1;
260 comp->ovl_indices[1] = 0; 265 comp->ovl_indices[1] = 0;
261 } 266 }