If module composition type is MDP or C2D and we have a skipped layer
(usually layers without backing buffers, layers with "invalid"
orientations or debug layers), mark every HWC layer below this layer
for GPU composition.
This logic is needed because ICS SF composes a bunch of z-ordered
HWC_FRAMEBUFFER (GPU) layers first and then the remaining bunch of
z-ordered HWC_OVERLAY layers last which breaks the overall z-ordered
layer rendering requirement. This logic also holds valid for 2-layer
bypass in ICS.
Change-Id: I5082affac8affd6b19d78be827d149901945a163
Validate the previous overlay and bypass handles before unlocking
the buffers. The reason for doing this, is that in certain use cases,
after the previous handles are stored, the buffer gets destroyed and the
handle is now invalid. The HWC however doesn't know that the handle is
invalid and tries to unlock the handle, resulting in a failure.
CRs-fixed: 323614
Change-Id: I0f0c8506e7e22f9fc01eb28af0270f9c4587c787
Qcom specific private flags have been moved to libQcomUI. Use these
flags flags in the hwcomposer.
Change-Id: I9898dd11a7fff72678fa1f744454fcf310507a63
Since composition bypass uses MDP overlays, which
need physically contiguous memory, we cannot use
bypass in cases where the buffers are using ashmem
or other virtual memory. Hence, avoid bypass in
such cases.
Change-Id: I5c6d20e68e15719295373a1b0f3b930536336c43
Synchronize turning off of composition bypass with display,
so that close happens only after FB content is displayed.
This fixes blinks observed when bypass needs to be turned off,
for reasons other than video content.
Change-Id: Id98bddd0cb2a89ea8729a188934ae1cd947cf305
If the input parameters in the prepare and set functions are invalid, unlock
any previously locked buffers.
Change-Id: Ifd3b02c3ae6d2095970d5e15b98196d7fa7dee4e
CRs-fixed: 322054
Use genlock to lock the bypass buffers before they are queued to the
overlay. After all the bypass buffers are queued, use genlock to
unlock the previously locked bypass buffers.
Change-Id: Ifdd7921f0c9f5d5744c899a0257a4b954274334b
When queuing buffers using the overlay:
- Set the NO_WAIT flag for the HDMI channel.
- Set the WAIT flag for the primary channel.
- Queue the buffer on the HDMI first.
- Queue the buffer on the primary.
- Wait for the HDMI Vsync.
Change-Id: Id24e9551230b7a7134bd21a7b3a9e8658f7de222
For copybit composition, aquire a read lock on the buffer, before
the blit operation and release the lock after the blit operation.
For overlay, aquire a read lock on buffer N that is sent to the
overlay. After the play call for buffer N returns, unlock the lock
held by buffer (N-1).
Change-Id: I3ff178d8ed8e3a289c199237dbec501afdb7e717
1. Enable composition bypass for 1 or 2 non-overlapping layers.
2. Open bypass only if video playback status is CLOSED.
3. Close bypass immediately if Video or Camera needs VG pipe.
Change-Id: I1bef030b32ff2721d00b61f7717027d4d9219d04
This change enables c2d composition in HWC by removing the temporary
flag added in the following commit:
commit 7b814382ad
Change-Id: Ia6705c369090b14f3a00678c4e82078bd6e58847
-- Enable HWC
-- handle overlay as lib rather than HAL
-- move copybit changes under COPYBIT_ENABLE flag (temporary)
Change-Id: I36d8f9688cd7cbd838e288e5f482d8ee5c9b2df6
Allow 1 or 2 non overlapping layers to use composition bypass.
This is an enhancement to the previous approach which uses
bypass strictly for 2 layers.
Change-Id: I879903db44cb1fddbe3e428ffa77eb67e95e0886
Close overlay channels in the next HWC set phase. This allows the
framebuffer to be composed prior to the closing of channels.
CRs-fixed: 305070
Change-Id: I8719381136c20c0febbd4f7bf5b935b92f6508ec
When composing UI along with video, enable the overlay NOWAIT option.
If there is no UI during overlay playback, use the WAIT flag.
Change-Id: Idc538e4412c790fc295a3aff1d1f23a6e4767fce
Update the overlay when we have a channel up. Previously, we did updates
only when the width and height changed. Now, we always update the overlay
when the channel is open, and not close the channel to update parameters
such as orientation change, flags etc.
Change-Id: I0b2ef8b19bd860d5361c391e040ff497f1023ae3
Bypass composition if we have 2 visible layers. However, this feature
is not used if:
1) Video playback is on
2) Rotation involved
3) App launch animation
4) HDMI connected
Set property debug.compbypass.enable=1 in build.prop
to enable this feature.
Change-Id: I4c0fa2aa1999c06c51f2b9a58641203316896e53
prepareOverlay will setup the channels for video playback, so
inform gralloc to close UI channels before they are setup.
Change-Id: I757a8fd79661eb66ccbe2ac1475e48740bbf1733
CRs-fixed: 298102
Create a new function to check if we need to skip the composition
during overlay operations.
Reset the previous compCount variable if there is no video layer present.
Change-Id: Ibf570805114440f117f0fb98b5f2d53c1780ec84
CRs-fixed: 298014
Put HDMI code in HWC under compile time flag.
This prevents crashes in use cases like HDMI used as primary.
If not done, non-existing code in gralloc is called in that
use case.
Change-Id: Ic7e792acf0c35eb12f04a74405619385d7288991
The overlay_buffer_info buffer geometry and size. When calling the
overlay from the gralloc or hardware composer, populate this structure
with the information from the gralloc handle.
(cherry picked from commit 128adc3b8177ef72f2bf21f4022d7ef06ed9281b)
Change-Id: I2f60f691ac01e67f150c753f168be754b14f94e6
Separate overlay setup and overlay play.
On setup failure, mark the layer to use C2D if enabled.
Else mark the layer to use GPU.
CRs-fixed: 292398
(cherry picked from commit b1459b0b1106ed66810b1c5a09878fae353c123c)
Change-Id: Id4c27384193612ab13e87d18492b0fef662eb8b4
If SurfaceFlinger marks a layer with the HWC_DO_NOT_USE_OVERLAY
flag, do not use the overlay to draw the layer
(cherry picked from commit 9271a839b6bbbdc7b22bd7f1dca6f4c0c63de965)
Change-Id: Ie44586a1254a2dc2ad41ae902debc5bb442cbfde
If we have only one overlay layer, and the rest of the layers
are not updating, set the HWC_SKIP_COMPOSITION flag to inform
SurfaceFlinger not to compose anything. Also skip the drawing of
any UI frames and swapping the buffers.
Change-Id: I2f6554c905756a08880cba531c0210a58396179b
CRs-fixed: 289477
If the layer blending has been disabled, disable copybit alpha so
that copybit does not perform any blend operation.
Change-Id: I9a83fad0f126adaf9540bc72d17e7dcb1c55cd0f
CRs-fixed: 288527
- Inform the gralloc of the HDMI status.
- If the HDMI is disconnected, close the overlay and also inform the
gralloc that video mirroring has stopped.
Change-Id: Ie89ffe860c0f9c9142d6c7f5d7a6c555884561ce
CRs-fixed: 286954
Whenever there is a change in the buffer geometry, set a flag in the
gralloc handle stating that the buffer geometry has changed.
In the HWC, whenever we encounter an update in the geometry, if the
channel is already open, we just call the necessary ioctls to update
the overlay information and not unnecessarily open/close channels.
Change-Id: I27db8fc497ebc514e262d6b7854739f312644714
When the layer flags are marked to maintain the original surface
resolution, draw the layer using the overlay.
Store the HDMI status in the overlay object instead of the HWC
context.
Set the correct parameters for the source and destination rectangles
when drawing the layer using copybit.
Change-Id: I6ab7e2b5ba7b457a5bc604fd3a0031e6bada82cb
SurfaceFlinger calls a hwc_set with a NULL context and
list when it is releasing the HWC. Check the validity
of the pointers before using it.
Change-Id: I5b61cc50a85b9b660646789b2cf9a0f4ee6e4a5c