etnaviv-gpu 134000.gpu: MMU fault status 0x00000002 on i.XM6 Quad Plus
Luís Mendes
luis.p.mendes at gmail.com
Fri Nov 3 16:37:50 UTC 2017
Sure, I'll give it a try later. Currently I am working on my day job.
On Fri, Nov 3, 2017 at 4:25 PM, Russell King - ARM Linux <
linux at armlinux.org.uk> wrote:
> On Fri, Nov 03, 2017 at 12:05:48PM +0000, Luís Mendes wrote:
> > So this is what I get with picture desc on the candidate corner cases:
> > Nov 3 11:57:04 picolo xf86_armada[786]: A: clip[x1=0,y1=0],
> > vSrc[w=1024,h=768], drawable[x=0,y=0], src_offset[x=0,y=0}
> > Nov 3 11:57:04 picolo xf86_armada[786]: A: Pict: 0x20e45a8: 32
> > (1024x768+0+0) R fmt XRGB8888
>
> I have my own case with mate here:
>
> etnaviv_accel_Composite(height=1, width=1,
> yDst=0, xDst=0, yMask=0, xMask=0, ySrc=-1, xSrc=-1,
> pDst=0x962b08, pMask=0x0, pSrc=0x962ab8, op=PictOpSrc)
>
> pSrc = {pDrawable = 0x86cf48, pFormat = 0x59bd78, format = PICT_x8r8g8b8,
> refcnt = 1, id = 0, repeat = 0, graphicsExposures = 0, subWindowMode = 1,
> polyEdge = 0, polyMode = 0, freeCompClip = 1, componentAlpha = 0,
> repeatType = 0, filter = 0, stateChanges = 0, unused = 0, pNext = 0x0,
> alphaMap = 0x0, alphaOrigin = {x = 0, y = 0}, clipOrigin = {x = 0, y =
> 0},
> clientClip = 0x0, serialNumber = 4071, pCompositeClip = 0x962b58,
> devPrivates = 0x0, transform = 0x0, pSourcePict = 0x0, filter_params =
> 0x0,
> filter_nparams = 0}
>
> pSrc->pDrawable = {type = 0, class = 1, depth = 24, bitsPerPixel = 32,
> id = 27262979, x = 1334, y = 0, width = 1, height = 25,
> pScreen = 0x599708, serialNumber = 4071}
> => DRAWABLE_WINDOW
>
> pSrc::Pixmap = {drawable = {type = 1, class = 0, depth = 24,
> bitsPerPixel = 32, id = 0, x = 0, y = 0, width = 1360, height = 27,
> pScreen = 0x599708, serialNumber = 499}, devPrivates = 0x84bd0c,
> refcnt = 3, devKind = 5440, devPrivate = {ptr = 0x84bd48, val = 8699208,
> uval = 8699208, fptr = 0x84bd48}, screen_x = 0, screen_y = 0,
> usage_hint = 536870914, master_pixmap = 0x0}
>
> So, what's being asked for is to copy a single pixel from -1,-1 on the
> source picture to 0,0 on the destination picture.
>
> The source picture is a window, with no repeat. The backing pixmap for
> the window is 1360x27. The window is located at 1334,0 on this pixmap.
>
> So, -1,-1 is off the top of the window, and off the top of the pixmap.
>
> From what I can tell from the Xrender spec
> (https://www.x.org/releases/current/doc/renderproto/renderproto.txt),
> this should mean, as repeat mode is "None", that the source should be
> treated as "transparent".
>
> Hmm, let's try to trap the case where the pixels we're asked for are off
> the pixmap, and use the fallback. Can you try this patch please?
>
> diff --git a/etnaviv/etnaviv_render.c b/etnaviv/etnaviv_render.c
> index 15cafdf..e846a23 100644
> --- a/etnaviv/etnaviv_render.c
> +++ b/etnaviv/etnaviv_render.c
> @@ -125,24 +125,27 @@ static void etnaviv_debug_blend_op(const char *func,
> * determine whether the picture repeat flag is meaningful. The
> * rectangle must have had the transformation applied.
> */
> -static Bool picture_needs_repeat(PicturePtr pPict, int x, int y,
> +static Bool picture_has_pixels(PicturePtr pPict, int x, int y,
> unsigned w, unsigned h)
> {
> DrawablePtr pDrawable;
>
> - if (!pPict->repeat)
> - return FALSE;
> -
> pDrawable = pPict->pDrawable;
> if (!pDrawable)
> + return FALSE;
> +
> + if (!drawable_contains(pDrawable, x, y, w, h))
> + return FALSE;
> +
> + if (!pPict->repeat)
> return TRUE;
>
> if (pPict->filter != PictFilterConvolution &&
> (pDrawable->width > 1 || pDrawable->height > 1) &&
> drawable_contains(pDrawable, x, y, w, h))
> - return FALSE;
> + return TRUE;
>
> - return TRUE;
> + return FALSE;
> }
>
> static const struct etnaviv_blend_op etnaviv_composite_op[] = {
> @@ -425,8 +428,8 @@ static struct etnaviv_pixmap
> *etnaviv_acquire_src(ScreenPtr pScreen,
> if (!transform_is_integer_translation(pict->transform, &tx, &ty))
> goto fallback;
>
> - if (picture_needs_repeat(pict, src_topleft->x + tx, src_topleft->y
> + ty,
> - clip->x2, clip->y2))
> + if (!picture_has_pixels(pict, src_topleft->x + tx, src_topleft->y
> + ty,
> + clip->x2, clip->y2))
> goto fallback;
>
> src_topleft->x += drawable->x + src_offset.x + tx;
> @@ -661,8 +664,8 @@ static int etnaviv_accel_composite_masked(PicturePtr
> pSrc, PicturePtr pMask,
> mask_offset.y += ty;
>
> /* We don't handle mask repeats (yet) */
> - if (picture_needs_repeat(pMask, mask_offset.x,
> mask_offset.y,
> - clip_temp.x2, clip_temp.y2))
> + if (!picture_has_pixels(pMask, mask_offset.x,
> mask_offset.y,
> + clip_temp.x2, clip_temp.y2))
> goto fallback;
>
> mask_offset.x += pMask->pDrawable->x;
>
>
> --
> RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
> FTTC broadband for 0.8mile line in suburbia: sync at 8.8Mbps down 630kbps
> up
> According to speedtest.net: 8.21Mbps down 510kbps up
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/etnaviv/attachments/20171103/9a26c308/attachment.html>
More information about the etnaviv
mailing list