Commit Graph

94 Commits

Author SHA1 Message Date
Naseer Ahmed
6bbd0a14a5 display: Support for S3D video
1. Add support to set HDMI to 3D mode
2. Add binder API to force 3D mode
3. Switch to 3D mode based on metadata
4. Configure pipes appropriately
5. Only side-by-side and top-bottom formats are currently supported

Change-Id: Iae579ecfa45aae088ff543d4143e5025e8c682fa
2015-02-20 16:18:40 -05:00
Jeykumar Sankaran
aedd143215 hwc: Partial update support for ping pong split.
ping-pong split needs source split to be enabled to stage two
pipes of a layer in the same Z order. This change adds partial
update support to generate ROI when source split is enabled.
When configured, ping-pong-split splits the layer mixer output equally
across two DSI's. To meet this limitation, the generated ROI is
adjusted to have equal widths from the panel mid point.

Change-Id: Ic307a1d5b902af9e352b0dfc6f5ab474ecd9c8a4
2015-01-30 15:56:08 -08:00
Arun Kumar K.R
299bcda69c hwc: Add support for perf display hint
- Set the perf hint when there is only one updating layer, which helps
  in reducing cpu params and thus reduce power.
- This feature is enabled with the property persist.mdpcomp_perfhint,
  which is set to a positive value, which will be the window of frames
  before the perf hint is set

CRs-fixed: 765460
Change-Id: Ie21e1cd201afab16bedd3c750ea3b0230769969a
2015-01-06 13:50:45 -08:00
Praveena Pachipulusu
66c8ef7b7f hwc: Set min panel refresh rate during idle timeout
Set minimum panel refresh rate during idle timeout for
power savings. Also handle dynamic refresh rate whenever
there is early return in prepare.

Change-Id: Ifb7b567adf47962789ee0cd1a97181cb53b53fd2
2014-12-15 13:11:36 +05:30
Jeykumar Sankaran
f4eb9fbedc hwc: Preserve dynamic partial update preference on framework reboot.
Dynamic partial update feature enabled post processing OR
partial update based on client preference. In case of framework
reboot, HWC needs to preserve the last set preference of these
features.

Change-Id: I4f53ac21f5404c7862d58248c86f23c45493f41b
2014-12-08 16:42:47 -08:00
Jeykumar Sankaran
53b05f2a95 hwc: Add binder API to control partial update
Expose binder API to control partial update dynamically. Partial
update feature cannot co-exist with post processing features
dependent on histogram data. With this API, OEM's can set their
preferences on these features on use case basis.

Change-Id: Iee3eaa1593e057b1a0b7d35e642352f7f02c460f
2014-12-05 16:40:30 -08:00
Saurabh Shah
acec8e48d2 hwc: Add support for configuring maximum mdp layers on secondary
Add support for configuring the maximum mdp layers on secondary
via persist.hwc.maxseclayers property. The default value is 1.

Move the check for max allowed layers to postHeuristicsHandling
rather than it being a part of strategies itself.

Change-Id: Icae6cb7e400fd95f60e0b3eb64e6b768e4dbd861
2014-12-01 14:06:53 -08:00
Jeykumar Sankaran
be93e27e44 hwc: Query MDP capability for blending stages supported.
- Read MDP sys_fs node for blending stages supported per mixer
  instead of hard cording the value. This makes the implementation
  scalable across chipsets.
- Add binder support to change the max pipes per layer value
  dynamically for MDP comp.

Change-Id: I3b83f4bdc2e2e81ca55c54fc6bcfd61c55fef501
2014-11-05 10:34:50 -08:00
Ramkumar Radhakrishnan
b33f490b2f hwc: Refactor windowboxing feature
1. Remove AIV video mode composition stratergy and reuse video only
   composition stratergy to achieve the same functionality.
2. Drop all non AIV layers from the external list at the start of MDP
   composition prepare and fall back to video only composition.

Change-Id: I34760e2df57cfbb923a6be0182e632c9ddd6aa07
2014-10-14 19:56:52 -07:00
Ramkumar Radhakrishnan
9d7bc31a00 hwc: Support for windowboxing feature on external
1. This feature is targeted to remove any window/pillar boxing on
   external display when zoom mode is enabled.
2. Preserve the aspect ratio of the external display by cropping and
   upscaling the tagged video layer during video playback on external.
3. User can tag the layers to be displayed on external display.
4. Set sys.hwc.windowbox_feature to true to enable this feature

Assumptions & Limitation:
    1. Tagged layers for external display will also be displayed on
       primary display along with untagged layers
    2. When zoom in mode is enabled, source crop left and source crop
       top of a tagged video layer is always assumed to be set to
       positive integer value. So pinch zoom feature or zooming in top
       left corner of the video use case cannot be supported.
    3. Except tagged video layers, all other tagged UI layers will
       use GPU for composition on external display, So all tagged UI
       layers cannot be secure layer.
    4. Rotation animation cannot be supported for this feature.

Change-Id: I8b934cf616ec23b4359d0120f9a291178a2781c6
2014-10-14 19:54:32 -07:00
Dileep Kumar Reddi
4070e93e1e hwc: Partial Update for MDP3 targets
Enable partial update for MDP3 targets.
Use computed ROI of mdpcomp in copybit
to avoid composition of layers outside ROI.

Change-Id: I4b23fd48cac814f8c35a3c01253dca8c297036f9
2014-10-08 01:08:56 -07:00
Saurabh Shah
59562ffb03 hwc/qdutils/qservice: Add dynamic idle timeout support
Add support for dynamically setting idle timeout values.
Move default idle timeout setting to IdleInvalidator.
Fix static var naming, handle errors from IdleInvalidator in hwc.
Property debug.hwc.idletime is removed with this change.

Example:
1) Set idle timeout to 100ms
adb shell service call display.qservice 16 i32 100
16 is the code for SET_IDLE_TIMEOUT, 100 is time in ms

2) Disable idle timeout
adb shell service call display.qservice 16 i32 0

Change-Id: I60e15a3ac869b4e9f4015b3be50a35c90d00d404
2014-10-03 10:53:31 -07:00
Arun Kumar K.R
a727a888ba display: Add support for dynamic refresh rate
- The primary panels refresh rate can be change by clients
- Required refresh rate will be set by client using metadata
- If there are multiple clients requesting, it will be used only
  when the refresh rates are equal, else it resets to default
- Set the new refresh rate only when there are only YUV layers
  updating or when the list has only one RGB layer updating
- MdpVersion gets the dyn fps capabilities from panelInfo

Change-Id: If3e7e6b2f028eb301399c4d32c748eed8a97c41f
2014-09-17 13:48:26 -07:00
Ramkumar Radhakrishnan
4ec775f955 hwc: Add support for secure RGB layer
1. Detect and account the number of secure RGB layers present.
2. Mark secure RGB layers for MDP comp in cache based stratergy.
3. If full MDP comp and partial MDP comp fails, Mark secure RGB
   layers for MDP composition.
4. In partial MDP comp reject load based composition, if secure
   layer is present to avoid GPU composition.
5. Disable idlefallback feature if secure RGB layer is present
   to avoid GPU composition.

Change-Id: Idb4c4f09b081ec20240a2602aa3f20332fa49ad6
2014-08-20 11:32:47 -07:00
Raj Kamal
389d6e33d3 Limit #ROT-SESSIONS to 4 in LayerRotMap and RotMgr
* Limit the number of rotator sessions to 4 both in
LayerRotMap and RotMgr structures

* Make use of MDPVersion getter fuctions to check
for maxMixerWidth and maxDownScale supported by MDP

Change-Id: I27dac877807fbb4ed6fcb3500a3a318a2ef5d8b2
2014-08-08 09:11:09 +05:30
Naseer Ahmed
35a268c23a display: Dynamic debug logging via binder
Provides a way to enable/disable logs at runtime via binder.
The logs need to be enabled from a priviliged shell.

For example,
$ adb shell service call display.qservice 15 i32 0 i32 1

Here 15 is the integer code for DYNAMIC_DEBUG in IQService.h
The first parameter 0 is for DEBUG_ALL
The second parameter 1 is to enable.

Hence, this command enables all debug logs.

Another example - this command enables vsync logging
$ adb shell service call display.qservice 15 i32 2 i32 1

Change-Id: I13d5f397d9d03f0ac6a14d3a3c9098ed59fc62fd
2014-07-03 18:51:04 -04:00
Arun Kumar K.R
b2a03b1db3 hwc: Extend PTOR feature for two layers
- Consider two smallest layers for PTOR feature which uses MDP comp.
- These two layers are rendered on a buffer and are queued to MDP
  to acheive full MDP Composition
- This helps to acheive performance enhancement

Change-Id: I43d9306ff19cd2d7a410c885316523965a44cbd4
2014-06-20 12:19:25 -07:00
Ramkumar Radhakrishnan
9d20b39e4a hwc: Rotate RGB layer using MDP Rotator
1. Use MDP rotator to rotate RGB layers which are rendered by software
2. Restrict total number of rotator sessions to 4 for all displays
3. Disable RGB layer rotation for all MDP versions < MDP5

Change-Id: Ie93111082dff9a16b614e9768df5d8ce83ff9e25
2014-06-16 12:10:40 -07:00
Raj Kamal
4393eaa6d3 hwc: Avoid MDP draw if prepare is not successful.
If #AppLayers are 0 or exceed MAX_NUM_APP_LAYERS
return early from MDP draw.

Change-Id: I834c7b04a295fbd9b98374cade880992d995ad1f
2014-06-06 14:42:45 +05:30
Linux Build Service Account
8a81e76fa2 Merge "hwc: Full MDP Composition mode with overlap region removal" 2014-06-02 16:52:47 -07:00
Sushil Chauhan
defd352e10 hwc: Full MDP Composition mode with overlap region removal
MDP bandwidth limitations can be avoided, if the overlapping region
covered by the smallest layer at a higher z-order, can be composed
on a render buffer using Copybit, and then it can be queued to MDP
along with other layers. It helps to improve performace by avoiding
GPU Composition in use cases like Home Screen pan. To enable this
feature, set system prop "persist.hwc.ptor.enable" to "true" or '1'
and enable Copybit HAL compilation.

Change-Id: Ib719d3dd42477837519518cc427f1b95356c28f7
2014-05-30 13:59:16 -07:00
Jeykumar Sankaran
6850ac64c5 hwc: Add display ROI in HWC dumpsys
Add ROI generated for each display in their dumpsys data.

Change-Id: I41fb79af9d42abc11ff147d18a600fd4ad60ab6c
2014-05-27 10:50:37 -07:00
Jeykumar Sankaran
0ad97c4c5c hwc: Simulate composition strategy
Provide support to simulate composition strategy tree to execute
and test multiple strategy combinations across test cases.

Change-Id: I5011fad32f8f45ecef47b6df513f9d72343697d2
2014-05-20 11:15:38 -07:00
Jeykumar Sankaran
6c7eeac178 hwc: Extend partial frame update for split displays
Extends partial frame update support for split displays by calculating
changing region(ROI) independently for each half of the screen. In case of
only one half updating, display driver shuts down the DSI/MDP mixer control
of the non updating half.

Maintains two ROI's for each display. In case of Non-split
displays, only left ROI is updated.

Change-Id: I8a67fe40aac665a48b6f8a46beffb9f8027851b2
2014-05-14 17:45:24 -07:00
Jeykumar Sankaran
1e15611ed4 Revert "hwc: Do not re-program H/W, if the frame geometry has not changed"
This reverts commit 5e268fcf56.

Reason: Breaking cache based composition strategy and partial
update feature.

Change-Id: I0c881c8e2bc6be2a0b3dc0d5e7d22a388179f8d8
2014-04-30 12:18:23 -07:00
Linux Build Service Account
32166191ac Merge "hwc: Use layer dirty rect to calculate frame's updating ROI" 2014-04-24 20:53:51 -07:00
Jeykumar Sankaran
7c85238f0c hwc: Use layer dirty rect to calculate frame's updating ROI
Use layer dirty rect instead of display frame to calculate frame's ROI.

Change-Id: If5fe93da7815efdf9b44ed683a4d80b397921cf1
2014-04-24 10:43:02 -07:00
Sushil Chauhan
5e268fcf56 hwc: Do not re-program H/W, if the frame geometry has not changed
There is no need to re-program the H/W, if the frame geometry of all
active displays, has not changed. It will help to improve performance
by avoiding re-configuration of HAL and driver, if it is not needed.

Change-Id: Ie01dce33be89afc7308a8103128d27b4b9fb5c4b
2014-04-22 11:29:31 -07:00
Saurabh Shah
c62f39861a overlay: Support for returning pipe based on capability
Add support for returning pipes based on capabilities.
getPipe() API takes in pipe specifications like format class,
scaling, display, mixer, fb and decides what pipe to return.
The nextPipe() API is now just a private helper.

Change-Id: I0ab809662c0ad6297e19a44f39264ee929944d13
2014-04-14 10:17:11 -07:00
Saurabh Shah
dd8237acd1 hwc/overlay: Add support for pipe priorities, 1 pipe config for FB
If using source split to stage 2 pipes on the same mixer stage,
the left pipe needs to be a higher priority than the right.

Add API in overlay to compare pipe priorities and use this in
source split config to stage pipes accordingly.

Add support for 1 pipe config for FB if updating rect is within 2048
pixels.

Change-Id: I8b33d5ebd0f8765ee842bab128d8abd67a110145
2014-04-02 13:22:53 -07:00
Praveena Pachipulusu
d9443c7e81 hwc: Use proper typecasts
- Remove compiler warnings
- Use proper typecasts

Change-Id: I7391f32ae31283239f5cebb93b02f3ce3a5c99f3
2014-03-28 09:17:43 +05:30
Ramkumar Radhakrishnan
fb822910e1 hwc: Set GPU performance hint.
1. Set the GPU hint flag to high for MIXED/GPU composition only for
   first frame after MDP to GPU/MIXED mode transition.
2. Set the GPU hint to default if the current composition type is GPU
   due to idle fallback or MDP composition.

Change-Id: I208a778017435a5a4620142da9d9fb3c50e09155
2014-03-20 21:16:09 -07:00
Manoj Kumar AVM
8cbbf7cb13 hqd: Restrict decimation when layer format is macro-tile
When layer format is macro-tile, decimation cannot be supported.
Add necessary checks to bail out for such use-case.

Change-Id: I711f07a2963a76280a08887d04770cd418d8bd1e
2014-03-14 09:33:53 -07:00
Saurabh Shah
ab47c69049 hwc: Add support for SourceSplit
Add support for SourceSplit. The mixers are abstracted from hwc.
There would be no translations to mixer understood destinations.

1) If a layer's crop and position are < 2048, only 1 pipe can be used
irrespective of position.
2) Else 2 pipes can be used with the layer equally split, without
regard to position.

Change-Id: I501a53838d147887c1e2299366663e05320d5096
2014-03-03 09:57:12 -08:00
Saurabh Shah
be7bd32a4d hwc: Iterative Load based comp
While performing load based mixed composition, iterate from max
stages of mixer to at least 2.
Get rid of modes that preferred GPU or MDP. This new mode will
include both plus the missed out batches.

Change-Id: Ideb06a2332fe2f59968367d28df848be01f4aedc
2014-02-26 22:48:52 -08:00
Linux Build Service Account
c6f2145cde Merge "qdutils: Refactor idletimeout fallback mechanism." 2014-02-26 06:54:48 -08:00
Linux Build Service Account
d9b4758163 Merge "h/q/d: Optimize framebuffer layer update" 2014-02-22 14:50:47 -08:00
Saurabh Shah
0cba653ad7 hwc: Remove bandwidth checks
Bandwidth checks will be done in the driver as part of resource check
which makes the existing checks in hwc redundant.

Change-Id: I39eb7de63618e8ea5981f9e1a1159224831f314a
2014-02-20 16:25:22 -08:00
Jeykumar Sankaran
c2d78d8f2c h/q/d: Optimize framebuffer layer update
While doing mixed mode composition, update only the region of the
framebuffer where layer contents are cached or updated. Avoids
MDP fetch for non-visible contents of FB.

Change-Id: I20997d79e02a6bac60d7333c28c6dde134263197
2014-02-20 10:19:53 -08:00
Ramkumar Radhakrishnan
92abb4f2ad qdutils: Refactor idletimeout fallback mechanism.
1. Use kernel timer interrupt to signal about the timeout to
   Invalidator thread and fallback to GPU composition.
2. This implementation avoids waking up the Invalidator thread for
   every idletimeout value during continuous update.

Change-Id: I4370f10a0ca06b5cb1e7bdcb047e9c8daec51afb
2014-02-19 14:28:59 -08:00
Saurabh Shah
4cc7423384 hwc: mdpcomp: Remove pipe estimation blocks
Pipe estimation was necessary when the unavailability from overlay
led to GPU fallback.
With the new design, hwc uses the next best strategy, so failure
to grab a pipe from overlay is ok.

Change-Id: Id20d2e6fd24aeb5af3ab84ec9dd8c52f6bbbef8b
2014-02-07 16:09:55 -08:00
Arun Kumar K.R
2aa44c66fa hwc: resolve compiler warnings
- remove unused variables.
- fix incorrect castings.

Change-Id: I7661edb4539a3ffc7d4aedbb9f633bc5ba1dc149
2014-02-03 09:20:36 -08:00
Ramkumar Radhakrishnan
8bb48d3314 hwc: Common Display HAL to support VDS & V4L2 WFD solutions
1. Define classes for VDS and V4L2 based WFD solutions.
2. Overload the functionalities for VDS and V4L2 WFD solutions.
3. Instantiate VDS object or V4L2 object during hwc init based on the
   property persist.hwc.enable_vds set by the user.
4. VDS solution is not verified as it requires some dependent changes.

Change-Id: I74bf944d532da138c850d4ec0c20b4a881489efa
2014-01-21 18:41:04 -08:00
Saurabh Shah
4578290750 hwc: Set default idle timeout to 70ms
Set default idle timeout to 70ms (~4 cycles on 60fps panel + some extra)
from the earlier 2sec.
The GPU timeout is around 80ms after which it turns off its rail,
clock and bus vote. So having a draw cycle before that is beneficial

Change-Id: I03291a4b8fd0707839567987febe1c088e21c92d
2014-01-08 17:40:12 -08:00
Saurabh Shah
df4741dba4 hwc: mdpcomp: Use other compositions if programming MDP fails
Currently, if programming MDP fails from a certain composition
strategy we fall back to GPU. This change, redesigns so that
composition types can have a chain of fall back strategies if
programming MDP fails. This happens currently only if resource
checks fail.

Change-Id: Ia7fb71788e595e59a91e95b1fb4eac3faea9451e
2013-12-19 12:00:25 -08:00
Saurabh Shah
3d4b8049b5 hwc: Combine FB program and source split adjust redundancy.
Combine the redundant code for FB programming and source split
adjustment into appropriate functions.

Change-Id: Ib99a2297a672e5ef40acb9f246021e57e41cd759
2013-12-12 11:08:36 -08:00
Prabhanjan Kandula
21918db5d1 hwc : Add hw limitation checks for MDP compposition.
Add hw limitation checks for MDP composition once
we identify actual layers for MDP. This should be generic
way for all basic hw limitations of underlying MDP/MDSS.
Current limitations:
- a-family : MDP can not handle alpha scaling.
- 8226 & 8974 : Can not handle if multiple layers need
  downscaling and blending

Change-Id: Ia944802d798f2d0e9cd4515d7e9854c7314cac78
CRs-fixed: 538803
2013-12-11 15:41:38 +05:30
Saurabh Shah
c7e4f1d37c hwc: mdpcomp: Remove redundant function to program MDP
The programYUV used for video-only cases is the same as programMDP
function. Remove the redundant function

Change-Id: I1d891404a77b2a47f90c236d4d6dcbbd02143d93
2013-12-09 11:00:21 -08:00
Linux Build Service Account
c258d31430 Merge "HWC: Use 2 VG pipes for YUV layer with width > 2048" 2013-12-04 19:31:07 -08:00
Saurabh Shah
f5f2b137bc hwc: Bandwidth check upgrade.
Use the low and high bandwidth values exported from driver per target
Use the low bandwidth value when the system has at least 1 video
mode panel, else use the high bandwidth value.
Newer targets could have bandwidth exceeding what an uint32 could
hold, so change the bytes read to be in gigs.
Do not use the framebuffer handle to get size, since the handle may
be null.

Change-Id: If3124ddc33334eba80d34ab7d8fc64d1b46697ce
2013-12-01 18:43:58 -08:00