Ver código fonte

st/xorg: Flesh out EXA PrepareComposite hook a little.

Check that the formats are supported, and don't crash with source-only
pictures.
tags/mesa_7_7_rc1
Michel Dänzer 16 anos atrás
pai
commit
ac2e0ddcd8
1 arquivos alterados com 28 adições e 2 exclusões
  1. 28
    2
      src/gallium/state_trackers/xorg/xorg_exa.c

+ 28
- 2
src/gallium/state_trackers/xorg/xorg_exa.c Ver arquivo

@@ -438,17 +438,43 @@ ExaPrepareComposite(int op, PicturePtr pSrcPicture,
ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
modesettingPtr ms = modesettingPTR(pScrn);
struct exa_context *exa = ms->exa;
struct exa_pixmap_priv *priv;

debug_printf("ExaPrepareComposite\n");

priv = exaGetPixmapDriverPrivate(pDst);
if (!priv || !priv->tex ||
!exa->scrn->is_format_supported(exa->scrn, priv->tex->format,
priv->tex->target,
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0))
return FALSE;

if (pSrc) {
priv = exaGetPixmapDriverPrivate(pSrc);
if (!priv || !priv->tex ||
!exa->scrn->is_format_supported(exa->scrn, priv->tex->format,
priv->tex->target,
PIPE_TEXTURE_USAGE_SAMPLER, 0))
return FALSE;
}

if (pMask) {
priv = exaGetPixmapDriverPrivate(pMask);
if (!priv || !priv->tex ||
!exa->scrn->is_format_supported(exa->scrn, priv->tex->format,
priv->tex->target,
PIPE_TEXTURE_USAGE_SAMPLER, 0))
return FALSE;
}

#if DISABLE_ACCEL
(void) exa;
return FALSE;
#else
return xorg_composite_bind_state(exa, op, pSrcPicture, pMaskPicture,
pDstPicture,
exaGetPixmapDriverPrivate(pSrc),
exaGetPixmapDriverPrivate(pMask),
pSrc ? exaGetPixmapDriverPrivate(pSrc) : NULL,
pMask ? exaGetPixmapDriverPrivate(pMask) : NULL,
exaGetPixmapDriverPrivate(pDst));
#endif
}

Carregando…
Cancelar
Salvar