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
Set mModeOn flag for fbupdate to false if validateAndSet function
fails, so that queueBuffer can be avoided for prepare failure.
Change-Id: Ifcc7a16caf8779f13411ae2a9eeeec6e6c846f4c
- Add utility function for 8x16
- Add internal function to identify if RGB doesn't
support scaling that is read from capabilities node.
- If UI layer needs scaling and RGB pipe doesn't
support scalar, request a VG pipe
- On 8x16, request DMA pipe for WFD
Change-Id: I94e8e0371bb10fcad53fddd2b7c45bc9b2594a4d
For dual DSI panels, when enabled partial update AND framebuffer rect
optimization, it is not necessary to update both the halves of
the framebuffer every frame. This channge adds support to update
framebuffer based on the updating region generated.
Change-Id: Ia63a8b9ac0e915c04e06122a16471ee18b5a8272
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
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
Remove all klockwork warnings and errors for libgralloc,
libhwcomposer, liboverlay, libqdutils, libqservice, libvirtual,
libexternal libraries to avoid buffer overflow and memory leaks.
Change-Id: I078143bcbcf5e4b342156bd8305a644566f7cc4b
Send the entire frame (array of overlays) to driver, so that it would
check pipes params and the whole frame wrt bandwidth and SMP.
Now, the overlay's commit API just prepares an overlay object but
makes no ioctl calls.
If the driver finds the frame, as a whole, to be not ok, the
validation fails and overlay/hwc return silently.
If a certain overlay object is mis-configured or pipes are
unavailable, the driver sets the number of objects it processed.
Overlay uses this to dump the incorrect config.
Change-Id: Ifb2b7fadc6bd6d9d94a35ba3908fbd832f41447f
* Useful to estimate GPU/MDP performance for different resolutions.
* MDP:
Every layer is downscaled/upscaled to primary panel resolution.
* GPU:
All layers will be composed in required resolution to FB.
FB is downscaled/upscaled to primary panel resolution.
* Steps to follow:
step 1: adb root
step 2: adb shell setprop debug.hwc.fbsize XRESxYRES
step 3: adb shell stop
step 4: adb shell start
Change-Id: I82a032df87c91549c49a9cdbd981ff02f105ff2e
Macro tile is enabled only if all the conditions are met:
1. GPU hardware should support Macro Tiling.
2. MDSS hardware should support Macro Tiling.
3. USAGE flags shouldnt contain GRALLOC_USAGE_SW_READ_OFTEN and
GRALLOC_USAGE_SW_WRITE_OFTEN.
4. RGB 16bit and 32bit formats.
5. persist.hwc.macro_tile_enable flag should be enabled.
PRIV_FLAGS_TILE_RENDERED flag is added to indicate whether the layer
is rendered/composited in Macro Tiling or Linear format.
Change-Id: Ie3139839c84d76c5d1a2300f33910a09eb7336f4
- This binder interface can be used by clients to know the
active visible region for a display(pri/ext/virt)
- When external orientation is used, return the destFrame of
the FrameBuffer layer, as its the viewFrame
Change-Id: I7cfd149c76c16b9a3031103c89b1932d44bcbecd
1. Use viewframe of external display to compute Aspect ratio position
for external.
2. Use viewframe to find the crop rectangle of the frame buffer to
configure rotator for external orientation usecase.
Change-Id: I564c70f202176c8b1f707cbafc08cbbb2abde383
When a rotator or mdp configuration for a display fails, reset the
layer-to-rotator mappings for that display and reset the release
fences for the rotator objects used for that display.
Note: The rotator itself is offline and not tied to any mixer. It is
from the mappings that we deduce which rotator object was used for
layers of which display. Also we don't delete rotator objects held
for a specific display, since during stability runs, failures could
repeat each round and we end up allocating and deallocating memory
unnecessarily. The rotator objects will be deleted automatically
when not required anymore.
Change-Id: I9a67f02574be30be3b96b3575f60530cb1c89e10
Increment hwc version to 1.3.
Create and use a converter from float source crop to integers.
Change-Id: I5e185195c975b3a9434c5d9dce9ae4757ff98739
(cherry picked from commit 7e5637c850bcdbe21784ca3bfa9668870306adff)
Add framebuffer to rotator map data structure if
rotator is used for pre rotating framebuffer.
Change-Id: I496656c22b289b0bb0bf8c49056384a7fad3ac7d
CRs-fixed: 569696
update the source video width and height set by the video decoder
for secure video smooth streaming usecase from metadata.
Change-Id: I73a3804d90557034604142481a232787dbc08f23
A display could be split if its dimensions exceed 2048 or in case
of primary if we make it so via device tree property.
Add an API to find if a display is split. Use this API instead of
going through a set of conditions in various use cases.
Rename the HighRes, LowRes objects to a more appropriate Split and
NonSplit respectively
Change-Id: Id847c2bf36ea9250e1cdbc0259fdec64bd124537
- In Buffer mirror mode, the output on the external should be rotated
based on the primary orientation.
- this is used for the side sync feature.
- buffermirrormode has higher precedence over external orientation
- Add binder interface to enable/disable buffermirror mode
Change-Id: Ibea0af9627d69b4d42453adc868b113d82613437
On WFD/HDMI connection, if the configured resolution is less than
Primary Resolution, Display HAL does the following:
1. sends hpd notification to SF with primary resolution.
2. configures MDP pipes with configured Resolution.
This is done to improve UI quality as MDP has better downscale
filter options compared to GPU.
Change-Id: I33570c13016a35ed6c5d22d4c34dfe75b2c605a1
HWC 1.2 API passes down the plane alpha and the blending
operation to apply. Pass this information to the MDP.
Change-Id: I7fbd17345d9157aa654e4b1031ac3e26adf87f37
- In Buffer mirror mode, the output on the external should be rotated
based on the primary orientation.
- this is used for the side sync feature.
- buffermirrormode has higher precedence over external orientation
- Add binder interface to enable/disable buffermirror mode
Change-Id: I1768dbfac239ae663927358ca9b8e5510b683385
On WFD/HDMI connection, if the configured resolution is less than
Primary Resolution, Display HAL does the following:
1. sends hpd notification to SF with primary resolution.
2. configures MDP pipes with configured Resolution.
This is done to improve UI quality as MDP has better downscale
filter options compared to GPU.
This works only for QCOM WFD proprietary solution.
Change-Id: Ic20e837bf02c0f7b6718946e70b936f3a469fa7c
- Make aspectratio calculations independent of ext dpy w/h
- pass hwc_rect_t to getAspectRatioPosition function instead of
x, y, w, h
- overload getAspectRatioPosition func to return the upscaled
or transformed position for a particular display based on the
values set by SurfaceFlinger
Change-Id: I0be9b2b4b030bdd8e69dc1493dc8cbac31918c27
If the left split is not published by the driver then the default should
be even split. This was missing from the configuration in utils. This is
already taken care of in framebuffer configuration and mdp composition.
Change-Id: I3db44481fd791809146752ddff56420dcbe89fb4
For split displays, earlier we allowed pipes to switch mixers in
subsequent rounds. This change prevents that and makes sure there
is one composition round where a pipe being transferred to another
mixer of the same display is UNSET
Change-Id: I3c679cc4256363eeb70c5cf8bcaf5047b8a064c2
Remove the non-wormhole calc usage from framebuffer config, since
it was intended for 2D blit which isnt used for split config.
Also the usage leads to incorrect behavior for split displays.
Change-Id: I262b2f7b04f400727bcd97677502239e1080c979
move fbzorder initialization for external during display animation
from landscape to portrait from hwc.cpp to hwc_fbupdate.cpp.
Change-Id: I4dbac87fe56f8262356043865b61a982244cd72a
Add support for unevenly split primary displays.
The driver provides info about the split via msm_fb_split sysfs node
For external we assume even split. If driver doesn't specify any split
for primary, we default to even split.
Change-Id: I4d541f41de2d7a5d2b62653fa33cab079a6d5d30
When WFD is connected to 8x26
1) On Video transition, have 1 padding round if external connected.
Required to shift pipes across mixers.
2) Request DMA pipe always for FB on WFD.
Necessary for rotation + writeback
3) Disable non-worm-hole calcs on external (because of 2)
4) Disable action-safe calcs on external (because of 2)
Change-Id: I63b50b2477db443f9ea1d3fa610b59295c9359b7
In the high res, partial mdp comp, we may end up using all rgb pipes
before fb is configured. Let fb use TYPE_ANY, so that pipes are
searched for starting with RGB, VG, DMA.
Change-Id: Ie30992f9ad56b83b3411ab4f6bea2bb317bb0ef1
Consider action safe values for UI and video while
configuring overlay for low res panels
Change-Id: Ia40c3e2bb21f808ec127df3edb10e484b82cec3f
CRs-fixed: 481442
These include constrained targets, with external connected which could
lead to a scarcity of pipes. Furthermore owing to a scarcity of writeback
interfaces, even if pipes are available, we may not be able to still
use rotator.
Change-Id: Ie2fb4c1726f32addcace89c268a126abe0cddbe0
Remove default arguments from setMDPflags function to get rid of
issues hidden from the developer.
Change-Id: Ic78645675b0aaab284fe2d0de8fffb4b26beabc7
- When primary is animating, the animation should not be
shown on the external display.
- Mark all app layers as HWC_OVERLAY on external during
animation so that SF wont compose it on FB.
Change-Id: Ic557cabfd9f2518614777c0e993541e36e090850