| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Bug: 18675947
Change-Id: I07a35782fa2f021574c4ec937920448288594288
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Inside sw_vsync generation loop, there is a logic error
while reading the vsync_rate. The vsync_rate should be re-read
after user sets the vsync_rate by calling start_sw_vsync
explicitly. This is guaranteed by re-reading it
ONLY after the vsync_cond is signalled.
Change-Id: I2da97e6cb972cc812f789c7f0fd621503679177d
|
|
|
|
|
|
|
|
| |
SurfaceFlinger will invoke eglSwapBuffers() for each display between
prepare() and set() calls. See DisplayDevice::swapBuffers().
Change-Id: I004648d7e3f334bb5d5edb5ab9a0a7f676296ad6
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
|
|
|
|
|
|
|
|
| |
For disconnected displays HWComposer may send NULL pointer as
list of layers.
Change-Id: Ifd71f7592c64a2d36fad2f4845cf8cb1ad2cce08
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
|
|
|
|
|
|
|
|
| |
Basic implementation of HWC 1.1 callbacks for display discovery.
Only primary LCD display is supported.
Change-Id: I6c48378f520887c143b2a6e03db5b4ab7322cb71
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
|
|
|
|
|
|
|
|
| |
Layers with HWC_FRAMEBUFFER_TARGET composition type should be
skipped from normal DSS mapping and mapped to FB oberlay instead.
Change-Id: I1085cc93a7df53e7a4d4a9f1a1584cd8fc12a4a8
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
|
|
|
|
|
| |
Change-Id: I1b5b67d70165c368f6059a88c7ae0b8e195d41af
Signed-off-by: Pavlo Suikov <pavlo.suikov@ti.com>
|
|\
| |
| |
| |
| |
| |
| |
| |
| | |
d-jb-mr1-release
Early regionizer adaptation for HWC API 1.0.
Change-Id: I1842e09500af8c9b79c0a01bb960ab9f2427d488
Signed-off-by: Pavlo Suikov <pavlo.suikov@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Rather than rely on the version of the hwcomposer api, use a
pthread to generate the vsync when software assistance is
needed.
Change-Id: I787120297fb5b5814442cf638dc53495fe9ce335
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
|
| |
| |
| |
| |
| |
| | |
Change-Id: I01582535beb22f7f4de493f74b4671ee59cdcadd
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It has been a long time since RGZ_TEST_INTEGRATION was used i.e.
where the regionizer code would be used independently with
command line bltsville environment.
Change-Id: I21a5c914cc2a249af322ed238887b178cf48f44e
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
|
| |
| |
| |
| |
| | |
Change-Id: I146b0b3a2aad83a97e7831218cb57c064748e0fa
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
omap4_hwc prefix is removed for functions and changed to
omap_hwc for data structures. Minor function name adjustment.
Only entry points into hwc are prefixed hwc_ for convenience.
Change-Id: Ib9e819b34fefa83bdf2534c53d7f63b4acaf99c2
Signed-off-by: Pavlo Suikov <pavlo.suikov@ti.com>
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Reduce code duplication by merging conversion from color
format to bits-per-pixel value into one function.
Change-Id: I8a859e1654f55e501b740b9433c972756e334f53
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
This change will allow to split monolithic hwc.c file into a number
of smaller, more manageable files with distinct functionality.
Change-Id: I990fc4a37fc58d1c5e511347524bdbd547ce8c0c
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
|
| |
| |
| |
| |
| |
| |
| | |
Decimal places were striped when applying rotation.
Change-Id: I39da24361481c447c3f6b8a829b8cfcfbe4d7ece
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
During transition effects Android framework may rescale
dockable layers, and resulting window size may have an odd
width or height. If the layer is significantly upscaled on
external display, the rounding error of integer division
will be blown up and may shift the adjusted overlay window
by few pixels.
Change-Id: Ib4034f4a34bb81e02fbcdb3c709c91dfb853bfaa
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
After we needed to have access to layer statistics in set(), a
copy of counts was added to hwc_dev. The copies are synced at
the end of gather_layer_statistics() and if some function will
update counts after that we are going to have two copies that
are out of sync.
Change-Id: I537f645bb54e275221ff9bd8fad632eb4a1169b1
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Includes are grouped in the following categories:
1. libc
2. Android framework
3. Kernel
4. Local
Change-Id: I29bc575bba5c2f5d3a1c56a33cce203e5d3a99a0
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This is a case of picking one convention rather than
another, the file had a mix of Linux kernel coding style,
C99 and 'misc' choices. The choice here is to go with
modern ISO C.
Use ISO C stdint.h for exact width integer types,
similarly use stdbool.h for vars used as booleans.
Use typedef for HWC defined structures. The convention is
struct foo is type foo_t. This wins because more code was
using this convention.
Change-Id: I432f5ae8700efb3bbd6f1bcce85a0c19c0b309e6
Signed-off-by: Mykola Ostrovskyy <mykola@ti.com>
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
There is a special case when the composition can be handled by
the DSS if all layers have the HAL_PIXEL_FORMAT_RGBA_8888 by
swapping the red and blue channels in the manager.
If we are using BLTPOLICY_ALL and the blitter can handle all
layers we don't need to swap the red and blue channels. This
was leading to see incorrect colors when we can blit all and all
layers have the HAL_PIXEL_FORMAT_RGBA_8888 format. The issue can
be fixed by avoiding the swap when using the blitter and when
BLTPOLICY_ALL is used.
This issue doesn't happen with BLTPOLICY_DEFAULT.
Change-Id: Id426b239b7cc99131aa426a7f3300b167dd135e3
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This flag was only working if hwc had decided to render something
with SGX. Maybe this flag should be replaced. It is an artifact
from when there was no gpu buffer synchronization. The only interest
in this is to do performance comparisons between DSS, SGX and GC320.
Change-Id: Ic3114b82409b088869cd8e4932577c67c56e4ef3
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Batch flags are now set as needed instead of setting all of them on
every blit. This fixes the multisource blend not being triggered in
the GC driver.
Change-Id: I28b80d8eb58b044464f39669abb3884b98a30336
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Instead of using the GPU to compose all layers when the hwc idle
timeout is reached, try first to blit everything if possible,
otherwise fall back to use the GPU.
This should save power on big resolution displays and allow the
GC320 to compose video buffers with more visual quality than the
GPU.
Change-Id: Ib2a020b700ce5131cb2711e2abff197831a990eb
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The workaround to avoid blits when playing a video was not allowing
the blitter to be used when using only the LCD (single display).
It was found by the display team the stuttering issue with video
playback is not GC320 but rather a bug in dsscomp to manage correctly
the synchronization when using multiple displays.
This patch revisits the workaround by not allowing to blit when
multiple displays are used but allowing all blits with a single
display use case.
This allows not only to prevent the stuttering when playing a video
(with the TV connected), it also allows any application that refreshes
the screen constantly to not stutter (like a 3D game) by using the
GPU to compose instead of the blitter.
The reason why the GPU performs better with the TV connected is the
compositor gets blocked on the availability of the flip chain buffers,
thus preventing very short periods of time between posts caused by the
VSYNC drifting of both displays not being handled correctly by dsscomp.
With this change a more consistent framerate is achieved when cloning
to TV.
Change-Id: Iedc93c3528095fcf24f4a34b8ac13744ece2b576
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Avoid resetting the regionizer state when a geometry change happens.
This allows the regionizer to process such event. If the regionizer
is not going to be used for a frame (i.e. pure DSS composition is
used) that breaks its state and must be reset.
Change-Id: Ib4e16b280f8fdb4f88f0ae28e9c7ae58db6b5c33
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This is a workaround for a issue that is happening with the regionizer
geometry change handling patch. The bubble sort algorithm is hanging,
avoiding the do-while solves the problem for now.
Change-Id: Iebdc7a516a93dfe85ba00f9e2e748e8323347cb4
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Allow the regionizer to analyze the previous, current and target
framebuffer states to draw only the needed areas of the screen.
It is required that SurfaceFlinger supports the HWC_EXTENDED_API and
the HWC_EXTENDED_OP_LAYERDATA operation to enable this feature.
With this change the following scenarios are handled efficiently:
A) When a layer moves, only draw the damaged area between the current
and the target framebuffer state instead of redrawing the whole screen
B) When a layer appears, only draw the area of the new layer, not the
whole screen
C) When a layer disappears, only draw the area where the layer used to
be instead of the whole screen
This change is also compatible with the dirty count per layer, that is,
when a layer in the same position and has the same content for multiple
frames.
Change-Id: I281567440564fd4e9d5865a392676d18653e9ecd
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Regionizer layers now store hwc layer data copies instead of just
pointers. This allows the framebuffer state to have additional
information to compare itself to another state.
Since the hwc layer pointer was used to know if a regionizer layer
was the background, with this change, now a unique buffer index was
created to distinguish it.
Change-Id: I897ee7d8e7962b7dafed7bce4db7a7e8a45ab08f
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A framebuffer state consists of a list of regionizer layers, each one has
stored a hwc layer, buffer index and a dirty counter. This represents what
the blitter has drawn in such framebuffer. For now only the current
framebuffer state is stored.
This change allows to introduce the geometry change handling in a easier
way since multiple framebuffer states are need for this purpose.
Additionally this patch addresses an inconsistency of using signed and
unsigned integers while accessing rgz_layerno field in the rgz structure
leading to warning messages that are difficult to deal with without making
explicit type casts.
Change-Id: I8bb5410b263bb734c52d445b4129a5dbea375225
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
GC driver doesn't support NV12 rotated buffers so instead of
applying a rotation to an NV12 buffer leave it as 0 degree and
normalize the destination rotation accordingly.
Change-Id: I3c0c42e6c2d731dcb83218e9890b78714679f587
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add the ability to rotate the destination parameters. Previously
only the sources where being rotated, with these changes now is possible
to rotate the destination instead of the sources.
Change-Id: I105b8603c34dfda100224456bbf3799c970ced00
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
|\ \
| |/
| |
| |
| |
| |
| |
| | |
Conflicts:
hwc/hwc.c
Change-Id: Ice74d3e62a2d6ccadb2d4333f0acc39d6366e0e7
Signed-off-by: Daniel Levin <dendy@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When the regionizer decides there are no blits as a result of a given
hwc geometry a -1 array index was being used to set the last blit
async, this needs to be avoided if there are no blits.
Change-Id: I3ce2f60a46096559c2ba308cf1d617a79731751e
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
There are certain situations where the regionizer decides it can handle
all layers passed to it and no blits are generated as a result. This is
caused by receiving more than two times the same geometry in the
prepare, which makes the regionizer to not generate dirty regions
(hence no blits). When this situation happens we are losing the first
blit handle by assigning it to NULL incorrectly.
This patch fixes the issue by checking if the sgx will be used for
composition instead of checking if we have no blits.
Change-Id: I68e87c386c98a8ca5047e1723c6c43db7c143447
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When scaling a layer, the blit is programmed in a way where the src
rectangle uses the whole cropping rectangle coordinates and
dimensions. However if the layer has a transform, the width and the
height need to be swapped not only in the geometry but also in the
src rectangle to match the new dimensions.
This patch adds the missing width and height swapping for the
src rectangle if the transformation is 90 or 270 degrees.
Change-Id: Ia9d822b6698210573fff662f2fcb129dfc048bf7
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Allow blitting layers that have scaling and a transformation now that
the GC driver supports it.
Change-Id: Iee5a34dc888656c47b3b514597b75868ccdc008a
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Adds scaling support to the regionizer code.
Limitations:
+ When blending two layers with scaling two blits are issued
instead of one. This is due to a Bltsville API limitation
which prevents specifying two different scale modes for each
source.
+ Support for scaling and rotation on the same blit is not
possible yet due to a GC driver bug.
Change-Id: Ie53157e527dacf639e42a72e371ef962f888131c
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This patch basically refactors the way the blit parameters are set
per subregion. The intention is to make the code ready to introduce
the scaling support easier and reduce greatly redundant code as well
Change-Id: I2b32056bf2fec1b636fda1c8df9964d90d51192c
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It was observed during ADTF runs than we get repeated redraws when
there are no layers to render.
This is because the check in prepare() will reset force_sgx to 0
when there are 1 or less layers. The side effect of this is to
cause a redraw every idle period.
Instead of doing this, account for the number of overlays used
for the primary display before calling the invalidate() api. This
logic should be satisfactory most current usecases.
Change-Id: I4b9cb44ebe250a6a46a6da27a1db94e88d6f26f3
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When the buffers composed with DSS pipes use exactly the tiler1d
memory available (like 4 fullscreen layers on Tablet 2), the
prepare operation fails to assign a DSS pipe to the last buffer
(even if it was possible) making it to be rendered by the GPU
but without a pipe to show it. This patch fixes the incorrect
memory check that caused this problem.
Change-Id: Ibb147a468aa2e1622600a56f581013dc1e517777
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
Signed-off-by: Jonas Larsson <jonas.larsson@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When HDMI is the default screen it may not be attached even
though the UI is active. UI compositions will keep coming but
the DSS manager will have problems if being programmed with
content incompatible with the intermediate display mode.
The last_mode variable is reset to "0" when hdmi panel is
not present. The on_tv variable indicates hdmi is default
panel. So if both are set then we need to make the overlay
number in composition to be "0".
OMAPLFB will skip posting the composition to dss driver when
overlay as "0".
There are still possibly compositions in the DSSCOMP queue
or in flight from PVR services to OMAPLFB so this behavior
doesn't cover all cases - so this should be considered a
work-around.
kernel dependency:
http://review.omapzoom.org/#/c/26982/
Change-Id: Idb6864aa57ebf6c403b91ea5b0e0865467008934
Signed-off-by: Dandawate Saket <dsaket@ti.com>
Signed-off-by: Tony Lofthouse <tony.lofthouse@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This is a workaround for a performance degradation found while
a video is playing and the GC320 is used at the same time.
Avoid blitting if there is a NV12 layer in the hwc layer list.
Change-Id: I12e789b9dd95e8b0d435aac1ae67ff65d4511396
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
During the transition from the recents panel to a selected application
during the transition a layer which requires a scale down from 1920x1200
to 594x361 is generated. This satisfies the normal limits but with buffers
of this size and also blending another 1920x1200 framebuffer. A VID1
underflow occurs.
This work-around avoids scaling when layers are wider than 720p and
are 4 byte RGB.
These conditions have been reproduced in isolation with ADTF.
Change-Id: If8fbc8f639abb89a0d736a3beabd2c12312ac3ac
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
|
| |
| |
| |
| |
| | |
Change-Id: I12d286ffe12c18bc9159a9bd1df65db43b63ac05
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A scaling decision may need to account for the size of
a pixel as dss based scaling capability has a relationship
with memory bandwidth
Change-Id: Idd68e11317fb0bb9e5d19f0a0d5818744968a5ab
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add support to handle s3d layer if an external S3D TV
is plugged in. For now if there's no s3d external tv,
the s3d layer is skipped (to be handled by SF).
Consolidated the ics branch S3D patches into a feature commit
for JB.
ff833da Fix flickering during S3D layer transitions
8e54c33 Fix typo in index when cloning s3d layer to ext TV.
37c16f2 [HWC] Add S3D support to hwcomposer hal
4f714c3 PATCH[3/3] OMAP_ENHANCEMENT_S3D cleanup.
This patch depends on
http://review.omapzoom.org/#/c/24872
Change-Id: I10d743ab3eb4f204512faccabc084aa26b1dd458
Signed-off-by: Jagadeesh Pakaravoor <j-pakaravoor@ti.com>
Signed-off-by: Tony Lofthouse <a0741364@ti.com>
Signed-off-by: Muralidhar Dixit <murali.dixit@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Under certain circumstances the ICS SurfaceFlinger attempts to disable
the hwc module by calling prepare with the list set to NULL. This code
path is specifically used by the Electron Beam screen off animation.
Since blit_reset() is just checking for a geometry change, this patch
handles the list pointer null case.
Reproducible with:
service call SurfaceFlinger 8 i32 1
(Thanks Jon & Michael!)
Change-Id: I27114b173446729511115bc73e780e7fdca8722b
Signed-off-by: Tony Lofthouse <tony.lofthouse@ti.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This patch removes the workaround introduced by the patch:
2cb90b8 hwc: rgz: Workaround for hdmi hotplug crash with 2D blitter enabled
Basically when the number of layers differ from the ones handled in the
previous frame, we don't trust anymore the region data and we need to
calculate it again. If the layers are the same in number and there has
not been a geometry change the region data can be reused for the same
frame
Change-Id: I4421ca5c7bc1b556cd54de888865ed83e957b919
Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
|