mirror of
https://github.com/X11Libre/xf86-video-ati.git
synced 2026-03-24 01:24:43 +00:00
exa: Accelerate ARGB2101010 pictures
Tested by Mario on a Radeon HD 4000 series for the r600 exa path, and on Radeon HD 5770 for the evergreen exa path. Signed-off-by: Fredrik Höglund <fredrik@kde.org> Reviewed-and-Tested-by: Mario Kleiner <mario.kleiner.de@gmail.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
This commit is contained in:
committed by
Michel Dänzer
parent
1f1d4b1fa7
commit
ee7e6c2598
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user