From: Fredrik Höglund <fredrik@xxxxxxx> 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 at kde.org> Reviewed-and-Tested-by: Mario Kleiner <mario.kleiner.de at gmail.com> v2: Add format handling in XXXSetSolidConsts() as well, as suggested by Fredrik. Signed-off-by: Mario Kleiner <mario.kleiner.de at gmail.com> --- src/evergreen_exa.c | 22 ++++++++++++++++++++++ src/r600_exa.c | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/evergreen_exa.c b/src/evergreen_exa.c index 90c9b6d..eed2ae5 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: @@ -1153,18 +1167,21 @@ static void EVERGREENSetSolidConsts(ScrnInfoPtr pScrn, float *buf, int format, u switch (format) { case PICT_a1r5g5b5: case PICT_a8r8g8b8: + case PICT_a2r10g10b10: pix_r = zf; /* R */ pix_g = yf; /* G */ pix_b = xf; /* B */ pix_a = wf; /* A */ break; case PICT_a8b8g8r8: + case PICT_a2b10g10r10: pix_r = xf; /* R */ pix_g = yf; /* G */ pix_b = zf; /* B */ pix_a = wf; /* A */ break; case PICT_x8b8g8r8: + case PICT_x2b10g10r10: pix_r = xf; /* R */ pix_g = yf; /* G */ pix_b = zf; /* B */ @@ -1184,6 +1201,7 @@ static void EVERGREENSetSolidConsts(ScrnInfoPtr pScrn, float *buf, int format, u break; case PICT_x1r5g5b5: case PICT_x8r8g8b8: + case PICT_x2r10g10b10: case PICT_r5g6b5: pix_r = zf; /* R */ pix_g = yf; /* G */ @@ -1425,6 +1443,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 +1452,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..6572951 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: @@ -1197,18 +1211,21 @@ static void R600SetSolidConsts(ScrnInfoPtr pScrn, float *buf, int format, uint32 switch (format) { case PICT_a1r5g5b5: case PICT_a8r8g8b8: + case PICT_a2r10g10b10: pix_r = zf; /* R */ pix_g = yf; /* G */ pix_b = xf; /* B */ pix_a = wf; /* A */ break; case PICT_a8b8g8r8: + case PICT_a2b10g10r10: pix_r = xf; /* R */ pix_g = yf; /* G */ pix_b = zf; /* B */ pix_a = wf; /* A */ break; case PICT_x8b8g8r8: + case PICT_x2b10g10r10: pix_r = xf; /* R */ pix_g = yf; /* G */ pix_b = zf; /* B */ @@ -1228,6 +1245,7 @@ static void R600SetSolidConsts(ScrnInfoPtr pScrn, float *buf, int format, uint32 break; case PICT_x1r5g5b5: case PICT_x8r8g8b8: + case PICT_x2r10g10b10: case PICT_r5g6b5: pix_r = zf; /* R */ pix_g = yf; /* G */ @@ -1464,6 +1482,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 +1491,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 */ -- 2.7.4