Age | Commit message (Collapse) | Author |
|
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
The Vivante GPU hardware appears to be buggy with some formats and
mask combinations, and is particularly noticable with BGRA/RGBA
swizzles with non-alpha formats. Fix this by switching to alpha
formats, and subsituting a maximal global alpha value instead. This
allows rendercheck to pass for all formats with PE20 hardware.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Improve the solid mask handling: we can do these checks earlier, and by
doing so, allow more mask formats through to be rendered by hardware.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
BoxCopy() is not used, and is #if 0'd out. Remove it.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
xts finds that PutImage() fails. This is because PutImage() on a
window drawable must include the drawables position on the pixmap,
and this was not being taken into account.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
FillSpans() x2 coordinate was undefined as it should be adding the
width to the x1 coordinate. Fix this.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
PolyFillRectSolid() must fill the rectangles in the order provided, and
must not optimise overlaps (due to XOR and similar GC operations.)
Re-architect the solid fill function to fill each rectangle in the
provided order for each clip box.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
When fetching the solid colour to fill the temporary composite pixmap,
always ensure that it is formatted for ARGB8888 to match the
destination format.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
|
The temporary composite pixmap was being created with a variable depth,
but we were trying to place ARGB8888 formatted pixels into it. Fix by
ensuring that this is always created with a depth of 32, and move the
format initialisation to one place.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
The PolyPoint() CoordModePrevious implementation was incorrect - it
only accounted for the previous point's relative position, not its
absolute position, leading to rendering errors.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Arrange for vivante_fill() to take the clip box and a list of boxes
to operate on, rather than a region.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Where the 2D engine has multiple pixel pipes, it is possible for two
GPU operations to overlap and operate concurrently. If this occurs
with an overlapping blit copy, one copying to the scanout buffer, and
another copying from the scanout buffer, it results in corrupted pixel
data read from the scanout buffer.
This happens when software cursor mode is enabled with a GC320, as is
the case with iMX6Q SoCs.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
We can blend alpha-only solid masks in PictOpOver mode by using the
Vivante GPU's global alpha mode, and instead performing an ATop
operation.
Gnome uses this when fading between two images, so this is a useful
operation to accelerate.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
FillSpans included the drawable x/y coordinates. This is not necessary
as the GC has miTranslate set, which ensures that we receive pre-
translated coordinates here.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
It is better to bail out early on pictures we don't handle than
to try to handle them and then fail. We check:
- the operation is one we can support
- the source and destinations do not have alpha maps
- the source has a drawable, or is a solid single coloured surface
- the mask does not have an alpha map, and is not component alpha
- the mask has a drawable
The last case was missed, and this causes Audacious to crash when using
the GTK+ theme. Bug reported by Matthew Coburn.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Move the final composite blend operation out into a separate function
to allow it's re-use with other code paths. This permits some future
optimisations to the composite operations.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Move the pixmap owner checking into vivante_map_gpu(), which is where
the ownership is switched. This helps to keep all that logic
localised.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
With modern kernel drivers, there is no need to implement batching;
this is only necessary if the kernel driver is buggy and allows the
commit-with-stall to return before the pending operations have been
completed.
This allows removal of the batch code; however, keeping the batch
code around is wise should the bug reappear in later code drops.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Tidy up the code a little by removing these unnecessary calls to
gcoHAL_Commit(), and fix the indentation in vivante_fill().
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
We don't need to replicate this in every function, we can just do this
when preparing the vivante pixmap for GPU access - but currently only
for the non-blended operations.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Rather than carrying this around as a separate variable, store it in
the vivante_pixmap structure so it follows the pixmap around. This
ensures we have a consistent set of metadata about the image stored
in the pixmap.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Signed-off-by: Sergey Bolshakov <sbolshakov@altlinux.org>
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Ensure that errors raised from gco2D_DisableAlphaBlend() are reported
in the Xorg log.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Our blit copies do not make use of the brush, so it's pointless
setting one up each time. Avoid this to reduce the overhead of
setting up blit copies.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
This better reflects its purpose.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
We need to use the original pointer when unmapping memory, and
don't forget to free the buffer if we allocated one.
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
|
|
Signed-off-by: Russell King <rmk_cubox@arm.linux.org.uk>
|