[PATCH 2/3] exa: Accelerate ARGB2101010 pictures

Fredrik Höglund fredrik at kde.org
Fri Dec 22 01:56:54 UTC 2017


On Monday 18 December 2017, Mario Kleiner wrote:
> From: Fredrik Höglund <fredrik at kde.org>
> 
> Tested by Mario on a Radeon HD 4000 series for the r600
> exa path, and on Radeon HD 5770 for the evergreen exa
> path.
> 
> Reviewed-and-Tested-by: Mario Kleiner <mario.kleiner.de at gmail.com>
> Cc: Fredrik Höglund <fredrik at kde.org>

I think the only question is whether SetSolidConsts() should support
2101010 formats. I believe solid pictures are always a8r8g8b8, so it
shouldn't matter in practice. But that function already supports all other
formats, so maybe the 2101010 ones should be added for the sake of
consistency.

But either way:

Signed-off-by: Fredrik Höglund <fredrik at kde.org>

> ---
>  src/evergreen_exa.c | 18 ++++++++++++++++++
>  src/r600_exa.c      | 18 ++++++++++++++++++
>  2 files changed, 36 insertions(+)
> 
> diff --git a/src/evergreen_exa.c b/src/evergreen_exa.c
> index 90c9b6d..8584813 100644
> --- a/src/evergreen_exa.c
> +++ b/src/evergreen_exa.c
> @@ -668,6 +668,10 @@ struct formatinfo {
>  };
>  
>  static struct formatinfo EVERGREENTexFormats[] = {
> +    {PICT_a2r10g10b10,	FMT_2_10_10_10},
> +    {PICT_x2r10g10b10,	FMT_2_10_10_10},
> +    {PICT_a2b10g10r10,	FMT_2_10_10_10},
> +    {PICT_x2b10g10r10,	FMT_2_10_10_10},
>      {PICT_a8r8g8b8,	FMT_8_8_8_8},
>      {PICT_x8r8g8b8,	FMT_8_8_8_8},
>      {PICT_a8b8g8r8,	FMT_8_8_8_8},
> @@ -723,6 +727,12 @@ static uint32_t EVERGREENGetBlendCntl(int op, PicturePtr pMask, uint32_t dst_for
>  static Bool EVERGREENGetDestFormat(PicturePtr pDstPicture, uint32_t *dst_format)
>  {
>      switch (pDstPicture->format) {
> +    case PICT_a2r10g10b10:
> +    case PICT_x2r10g10b10:
> +    case PICT_a2b10g10r10:
> +    case PICT_x2b10g10r10:
> +	*dst_format = COLOR_2_10_10_10;
> +	break;
>      case PICT_a8r8g8b8:
>      case PICT_x8r8g8b8:
>      case PICT_a8b8g8r8:
> @@ -891,6 +901,7 @@ static Bool EVERGREENTextureSetup(PicturePtr pPict, PixmapPtr pPix,
>  
>      /* component swizzles */
>      switch (pPict->format) {
> +    case PICT_a2r10g10b10:
>      case PICT_a1r5g5b5:
>      case PICT_a8r8g8b8:
>  	pix_r = SQ_SEL_Z; /* R */
> @@ -898,12 +909,14 @@ static Bool EVERGREENTextureSetup(PicturePtr pPict, PixmapPtr pPix,
>  	pix_b = SQ_SEL_X; /* B */
>  	pix_a = SQ_SEL_W; /* A */
>  	break;
> +    case PICT_a2b10g10r10:
>      case PICT_a8b8g8r8:
>  	pix_r = SQ_SEL_X; /* R */
>  	pix_g = SQ_SEL_Y; /* G */
>  	pix_b = SQ_SEL_Z; /* B */
>  	pix_a = SQ_SEL_W; /* A */
>  	break;
> +    case PICT_x2b10g10r10:
>      case PICT_x8b8g8r8:
>  	pix_r = SQ_SEL_X; /* R */
>  	pix_g = SQ_SEL_Y; /* G */
> @@ -922,6 +935,7 @@ static Bool EVERGREENTextureSetup(PicturePtr pPict, PixmapPtr pPix,
>  	pix_b = SQ_SEL_W; /* B */
>  	pix_a = SQ_SEL_1; /* A */
>  	break;
> +    case PICT_x2r10g10b10:
>      case PICT_x1r5g5b5:
>      case PICT_x8r8g8b8:
>      case PICT_r5g6b5:
> @@ -1425,6 +1439,8 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture,
>      cb_conf.surface = accel_state->dst_obj.surface;
>  
>      switch (pDstPicture->format) {
> +    case PICT_a2r10g10b10:
> +    case PICT_x2r10g10b10:
>      case PICT_a8r8g8b8:
>      case PICT_x8r8g8b8:
>      case PICT_a1r5g5b5:
> @@ -1432,6 +1448,8 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture,
>      default:
>  	cb_conf.comp_swap = 1; /* ARGB */
>  	break;
> +    case PICT_a2b10g10r10:
> +    case PICT_x2b10g10r10:
>      case PICT_a8b8g8r8:
>      case PICT_x8b8g8r8:
>  	cb_conf.comp_swap = 0; /* ABGR */
> diff --git a/src/r600_exa.c b/src/r600_exa.c
> index 22d4b31..c69b8fc 100644
> --- a/src/r600_exa.c
> +++ b/src/r600_exa.c
> @@ -727,6 +727,10 @@ struct formatinfo {
>  };
>  
>  static struct formatinfo R600TexFormats[] = {
> +    {PICT_a2r10g10b10,	FMT_2_10_10_10},
> +    {PICT_x2r10g10b10,	FMT_2_10_10_10},
> +    {PICT_a2b10g10r10,	FMT_2_10_10_10},
> +    {PICT_x2b10g10r10,	FMT_2_10_10_10},
>      {PICT_a8r8g8b8,	FMT_8_8_8_8},
>      {PICT_x8r8g8b8,	FMT_8_8_8_8},
>      {PICT_a8b8g8r8,	FMT_8_8_8_8},
> @@ -782,6 +786,12 @@ static uint32_t R600GetBlendCntl(int op, PicturePtr pMask, uint32_t dst_format)
>  static Bool R600GetDestFormat(PicturePtr pDstPicture, uint32_t *dst_format)
>  {
>      switch (pDstPicture->format) {
> +    case PICT_a2r10g10b10:
> +    case PICT_x2r10g10b10:
> +    case PICT_a2b10g10r10:
> +    case PICT_x2b10g10r10:
> +	*dst_format = COLOR_2_10_10_10;
> +	break;
>      case PICT_a8r8g8b8:
>      case PICT_x8r8g8b8:
>      case PICT_a8b8g8r8:
> @@ -906,6 +916,7 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix,
>  
>      /* component swizzles */
>      switch (pPict->format) {
> +    case PICT_a2r10g10b10:
>      case PICT_a1r5g5b5:
>      case PICT_a8r8g8b8:
>  	pix_r = SQ_SEL_Z; /* R */
> @@ -913,12 +924,14 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix,
>  	pix_b = SQ_SEL_X; /* B */
>  	pix_a = SQ_SEL_W; /* A */
>  	break;
> +    case PICT_a2b10g10r10:
>      case PICT_a8b8g8r8:
>  	pix_r = SQ_SEL_X; /* R */
>  	pix_g = SQ_SEL_Y; /* G */
>  	pix_b = SQ_SEL_Z; /* B */
>  	pix_a = SQ_SEL_W; /* A */
>  	break;
> +    case PICT_x2b10g10r10:
>      case PICT_x8b8g8r8:
>  	pix_r = SQ_SEL_X; /* R */
>  	pix_g = SQ_SEL_Y; /* G */
> @@ -937,6 +950,7 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix,
>  	pix_b = SQ_SEL_W; /* B */
>  	pix_a = SQ_SEL_1; /* A */
>  	break;
> +    case PICT_x2r10g10b10:
>      case PICT_x1r5g5b5:
>      case PICT_x8r8g8b8:
>      case PICT_r5g6b5:
> @@ -1464,6 +1478,8 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
>      cb_conf.surface = accel_state->dst_obj.surface;
>  
>      switch (pDstPicture->format) {
> +    case PICT_a2r10g10b10:
> +    case PICT_x2r10g10b10:
>      case PICT_a8r8g8b8:
>      case PICT_x8r8g8b8:
>      case PICT_a1r5g5b5:
> @@ -1471,6 +1487,8 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
>      default:
>  	cb_conf.comp_swap = 1; /* ARGB */
>  	break;
> +    case PICT_a2b10g10r10:
> +    case PICT_x2b10g10r10:
>      case PICT_a8b8g8r8:
>      case PICT_x8b8g8r8:
>  	cb_conf.comp_swap = 0; /* ABGR */
> 



More information about the amd-gfx mailing list