[Mesa-dev] [PATCH 2/4] etnaviv: add support for swizzled texture formats
Passes all ext_texture_swizzle piglits. Signed-off-by: Christian Gmeiner --- src/gallium/drivers/etnaviv/etnaviv_format.c | 91 ++- src/gallium/drivers/etnaviv/etnaviv_format.h | 4 ++ src/gallium/drivers/etnaviv/etnaviv_screen.c | 2 +- src/gallium/drivers/etnaviv/etnaviv_texture.c | 9 ++- 4 files changed, 71 insertions(+), 35 deletions(-) diff --git a/src/gallium/drivers/etnaviv/etnaviv_format.c b/src/gallium/drivers/etnaviv/etnaviv_format.c index e9cd104..02b8d52 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_format.c +++ b/src/gallium/drivers/etnaviv/etnaviv_format.c @@ -40,6 +40,7 @@ struct etna_format { unsigned tex; unsigned rs; boolean present; + const unsigned char tex_swiz[4]; }; #define RS_FORMAT_NONE ~0 @@ -51,22 +52,31 @@ struct etna_format { #define RS_FORMAT_X8B8G8R8(RS_FORMAT_X8R8G8B8 | RS_FORMAT_RB_SWAP) #define RS_FORMAT_A8B8G8R8(RS_FORMAT_A8R8G8B8 | RS_FORMAT_RB_SWAP) +#define SWIZ(x,y,z,w) {\ + PIPE_SWIZZLE_##x, \ + PIPE_SWIZZLE_##y, \ + PIPE_SWIZZLE_##z, \ + PIPE_SWIZZLE_##w\ +} + /* vertex + texture */ -#define VT(pipe, vtxfmt, texfmt, rsfmt) \ +#define VT(pipe, vtxfmt, texfmt, texswiz, rsfmt) \ [PIPE_FORMAT_##pipe] = { \ .vtx = VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_##vtxfmt, \ .tex = TEXTURE_FORMAT_##texfmt, \ .rs = RS_FORMAT_##rsfmt,\ .present = 1, \ + .tex_swiz = texswiz,\ } /* texture-only */ -#define _T(pipe, fmt, rsfmt) \ +#define _T(pipe, fmt, swiz, rsfmt) \ [PIPE_FORMAT_##pipe] = {\ .vtx = ETNA_NO_MATCH,\ .tex = TEXTURE_FORMAT_##fmt, \ .rs = RS_FORMAT_##rsfmt, \ .present = 1,\ + .tex_swiz = swiz,\ } /* vertex-only */ @@ -87,9 +97,9 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { V_(R8_USCALED, UNSIGNED_BYTE, NONE), V_(R8_SSCALED, BYTE, NONE), - _T(A8_UNORM, A8, NONE), - _T(L8_UNORM, L8, NONE), - _T(I8_UNORM, I8, NONE), + _T(A8_UNORM, A8, SWIZ(X, Y, Z, W), NONE), + _T(L8_UNORM, L8, SWIZ(X, Y, Z, W), NONE), + _T(I8_UNORM, I8, SWIZ(X, Y, Z, W), NONE), /* 16-bit */ V_(R16_UNORM, UNSIGNED_SHORT, NONE), @@ -100,15 +110,15 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { V_(R16_SSCALED, SHORT, NONE), V_(R16_FLOAT, HALF_FLOAT, NONE), - _T(B4G4R4A4_UNORM, A4R4G4B4, A4R4G4B4), - _T(B4G4R4X4_UNORM, X4R4G4B4, X4R4G4B4), + _T(B4G4R4A4_UNORM, A4R4G4B4, SWIZ(X, Y, Z, W), A4R4G4B4), + _T(B4G4R4X4_UNORM, X4R4G4B4, SWIZ(X, Y, Z, W), X4R4G4B4), - _T(L8A8_UNORM, A8L8, NONE), + _T(L8A8_UNORM, A8L8, SWIZ(X, Y, Z, W), NONE), - _T(Z16_UNORM, D16, A4R4G4B4), - _T(B5G6R5_UNORM, R5G6B5, R5G6B5), - _T(B5G5R5A1_UNORM, A1R5G5B5, A1R5G5B5), - _T(B5G5R5X1_UNORM, X1R5G5B5, X1R5G5B5), + _T(Z16_UNORM, D16, SWIZ(X, Y, Z, W), A4R4G4B4), + _T(B5G6R5_UNORM, R5G6B5, SWIZ(X, Y, Z, W), R5G6B5), + _T(B5G5R5A1_UNORM, A1R5G5B5, SWIZ(X, Y, Z, W), A1R5G5B5), + _T(B5G5R5X1_UNORM, X1R5G5B5, SWIZ(X, Y, Z, W), X1R5G5B5), V_(R8G8_UNORM, UNSIGNED_BYTE, NONE), V_(R8G8_SNORM, BYTE, NONE), @@ -147,25 +157,25 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { V_(R8G8B8A8_UNORM, UNSIGNED_BYTE, A8B8G8R8), V_(R8G8B8A8_SNORM, BYTE, A8B8G8R8), - _T(R8G8B8X8_UNORM, X8B8G8R8, X8B8G8R8), + _T(R8G8B8X8_UNORM, X8B8G8R8, SWIZ(X, Y, Z, W), X8B8G8R8), V_(R8G8B8A8_UINT,UNSIGNED_BYTE, A8B8G8R8), V_(R8G8B8A8_SINT,BYTE, A8B8G8R8), V_(R8G8B8A8_USCALED, UNSIGNED_BYTE, A8B8G8R8), V_(R8G8B8A8_SSCALED, BYTE, A8B8G8R8), - _T(R8G8B8A8_UNORM, A8B8G8R8, A8B8G8R8), - _T(R8G8B8X8_UNORM, X8B8G8R8, X8B8G8R8), + _T(R8G8B8A8_UNORM, A8B8G8R8, SWIZ(X, Y, Z, W), A8B8G8R8), + _T(R8G8B8X8_UNORM, X8B8G8R8, SWIZ(X, Y, Z, W), X8B8G8R8), - _T(B8G8R8A8_UNORM, A8R8G8B8, A8R8G8B8), - _T(B8G8R8X8_UNORM, X8R8G8B8, X8R8G8B8), + _T(B8G8R8A8_UNORM, A8R8G8B8, SWIZ(X, Y, Z, W), A8R8G8B8), + _T(B8G8R8X8_UNORM, X8R8G8B8, SWIZ(X, Y, Z, W), X8R8G8B8), V_(R10G10B10A2_UNORM, UNSIGNED_INT_10_10_10_2, NONE), V_(R10G10B10A2_SNORM, INT_10_10_10_2, NONE), V_(R10G10B10A2_USCALED, UNSIGNED_INT_10_10_10_2, NONE), V_(R10G10B10A2_SSCALED, INT_10_10_10_2, NONE), - _T(X8Z24_UNORM, D24S8, A8R8G8B8), - _T(S8_UINT_Z24_UNORM, D24S8, A8R8G8B8), + _T(X8Z24_UNORM, D24S8, SWIZ(X, Y, Z, W), A8R8G8B8), + _T(S8_UINT_Z24_UNORM, D24S8, SWIZ(X, Y, Z, W), A8R8G8B8), /* 48-bit */ V_(R16G16B16_UNORM, UNSIGNED_SHORT, NONE), @@ -215,24 +225,22 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { V_(R32G32B32A32_FIXED, FIXED,NONE),
Re: [Mesa-dev] [PATCH 2/4] etnaviv: add support for swizzled texture formats
On Sat, Jun 24, 2017 at 10:41:58AM +0200, Christian Gmeiner wrote: > Hi > > 2017-06-22 14:39 GMT+02:00 Wladimir J. van der Laan : > > On Wed, Jun 21, 2017 at 10:36:46PM +0200, Christian Gmeiner wrote: > >> Passes all ext_texture_swizzle piglits. > > > > You seem to have dropped the check in etnaviv_screen.c for HALTI0 when > > texture > > formats have implicit non-identity swizzle. > > I do think that is necessary as those formats don't work on > > > Yeah I totally overlooked it :( What do you think about something like this: Reviewed-By: Wladimir J. van der Laan > > >8--- > > From ad780e77bfac7ed5c5427ad4b850d3b596558f0a Mon Sep 17 00:00:00 2001 > From: Christian Gmeiner > Date: Fri, 16 Jun 2017 17:02:29 +0200 > Subject: [PATCH] etnaviv: add support for swizzled texture formats > > Passes all ext_texture_swizzle piglits. > > Signed-off-by: Christian Gmeiner > --- > src/gallium/drivers/etnaviv/etnaviv_format.c | 103 > ++ > src/gallium/drivers/etnaviv/etnaviv_format.h | 7 ++ > src/gallium/drivers/etnaviv/etnaviv_screen.c | 19 +++-- > src/gallium/drivers/etnaviv/etnaviv_texture.c | 9 +-- > 4 files changed, 99 insertions(+), 39 deletions(-) > > diff --git a/src/gallium/drivers/etnaviv/etnaviv_format.c > b/src/gallium/drivers/etnaviv/etnaviv_format.c > index e9cd1040b5..ee50b52962 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_format.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_format.c > @@ -40,6 +40,7 @@ struct etna_format { > unsigned tex; > unsigned rs; > boolean present; > + const unsigned char tex_swiz[4]; > }; > > #define RS_FORMAT_NONE ~0 > @@ -51,22 +52,31 @@ struct etna_format { > #define RS_FORMAT_X8B8G8R8(RS_FORMAT_X8R8G8B8 | RS_FORMAT_RB_SWAP) > #define RS_FORMAT_A8B8G8R8(RS_FORMAT_A8R8G8B8 | RS_FORMAT_RB_SWAP) > > +#define SWIZ(x,y,z,w) {\ > + PIPE_SWIZZLE_##x, \ > + PIPE_SWIZZLE_##y, \ > + PIPE_SWIZZLE_##z, \ > + PIPE_SWIZZLE_##w\ > +} > + > /* vertex + texture */ > -#define VT(pipe, vtxfmt, texfmt, rsfmt) \ > +#define VT(pipe, vtxfmt, texfmt, texswiz, rsfmt) \ > [PIPE_FORMAT_##pipe] = { \ >.vtx = VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_##vtxfmt, \ >.tex = TEXTURE_FORMAT_##texfmt, \ >.rs = RS_FORMAT_##rsfmt,\ >.present = 1, \ > + .tex_swiz = texswiz,\ > } > > /* texture-only */ > -#define _T(pipe, fmt, rsfmt) \ > +#define _T(pipe, fmt, swiz, rsfmt) \ > [PIPE_FORMAT_##pipe] = {\ >.vtx = ETNA_NO_MATCH,\ >.tex = TEXTURE_FORMAT_##fmt, \ >.rs = RS_FORMAT_##rsfmt, \ >.present = 1,\ > + .tex_swiz = swiz,\ > } > > /* vertex-only */ > @@ -87,9 +97,9 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { > V_(R8_USCALED, UNSIGNED_BYTE, NONE), > V_(R8_SSCALED, BYTE, NONE), > > - _T(A8_UNORM, A8, NONE), > - _T(L8_UNORM, L8, NONE), > - _T(I8_UNORM, I8, NONE), > + _T(A8_UNORM, A8, SWIZ(X, Y, Z, W), NONE), > + _T(L8_UNORM, L8, SWIZ(X, Y, Z, W), NONE), > + _T(I8_UNORM, I8, SWIZ(X, Y, Z, W), NONE), > > /* 16-bit */ > V_(R16_UNORM, UNSIGNED_SHORT, NONE), > @@ -100,15 +110,15 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { > V_(R16_SSCALED, SHORT, NONE), > V_(R16_FLOAT, HALF_FLOAT, NONE), > > - _T(B4G4R4A4_UNORM, A4R4G4B4, A4R4G4B4), > - _T(B4G4R4X4_UNORM, X4R4G4B4, X4R4G4B4), > + _T(B4G4R4A4_UNORM, A4R4G4B4, SWIZ(X, Y, Z, W), A4R4G4B4), > + _T(B4G4R4X4_UNORM, X4R4G4B4, SWIZ(X, Y, Z, W), X4R4G4B4), > > - _T(L8A8_UNORM, A8L8, NONE), > + _T(L8A8_UNORM, A8L8, SWIZ(X, Y, Z, W), NONE), > > - _T(Z16_UNORM, D16, A4R4G4B4), > - _T(B5G6R5_UNORM, R5G6B5, R5G6B5), > - _T(B5G5R5A1_UNORM, A1R5G5B5, A1R5G5B5), > - _T(B5G5R5X1_UNORM, X1R5G5B5, X1R5G5B5), > + _T(Z16_UNORM, D16, SWIZ(X, Y, Z, W), A4R4G4B4), > + _T(B5G6R5_UNORM, R5G6B5, SWIZ(X, Y, Z, W), R5G6B5), > + _T(B5G5R5A1_UNORM, A1R5G5B5, SWIZ(X, Y, Z, W), A1R5G5B5), > + _T(B5G5R5X1_UNORM, X1R5G5B5, SWIZ(X, Y, Z, W), X1R5G5B5), > > V_(R8G8_UNORM, UNSIGNED_BYTE, NONE), > V_(R8G8_SNORM, BYTE, NONE), > @@ -147,25 +157,25 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { > > V_(R8G8B8A8_UNORM, UNSIGNED_BYTE, A8B8G8R8), > V_(R8G8B8A8_SNORM, BYTE, A8B8G8R8), > - _T(R8G8B8X8_UNORM, X8B8G8R8, X8B8G8R8), > + _T(R8G8B8X8_UNORM, X8B8G8R8, SWIZ(X, Y, Z, W), X8B8G8R8), > V_(R8G8B8A8_UINT,UNSIGNED_BYTE, A8B8G8R8), > V_(R8G8B8A8_SINT,BYTE, A8B8G8R8), > V_(R8G8B8A8_USCALED, UNSIGNED_BYTE, A8B8G8R8), > V_(R8G8B8A8_SSCALED, BYTE, A8B8G8R8), > > - _T(R8G8B8A8_UNORM, A8B8G8R8, A8B8G8R8),
Re: [Mesa-dev] [PATCH 2/4] etnaviv: add support for swizzled texture formats
On Wed, Jun 21, 2017 at 10:36:46PM +0200, Christian Gmeiner wrote: > Passes all ext_texture_swizzle piglits. You seem to have dropped the check in etnaviv_screen.c for HALTI0 when texture formats have implicit non-identity swizzle. I do think that is necessary as those formats don't work on Signed-off-by: Christian Gmeiner > --- > src/gallium/drivers/etnaviv/etnaviv_format.c | 91 > ++- > src/gallium/drivers/etnaviv/etnaviv_format.h | 4 ++ > src/gallium/drivers/etnaviv/etnaviv_screen.c | 2 +- > src/gallium/drivers/etnaviv/etnaviv_texture.c | 9 ++- > 4 files changed, 71 insertions(+), 35 deletions(-) > > diff --git a/src/gallium/drivers/etnaviv/etnaviv_format.c > b/src/gallium/drivers/etnaviv/etnaviv_format.c > index e9cd104..02b8d52 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_format.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_format.c > @@ -40,6 +40,7 @@ struct etna_format { > unsigned tex; > unsigned rs; > boolean present; > + const unsigned char tex_swiz[4]; > }; > > #define RS_FORMAT_NONE ~0 > @@ -51,22 +52,31 @@ struct etna_format { > #define RS_FORMAT_X8B8G8R8(RS_FORMAT_X8R8G8B8 | RS_FORMAT_RB_SWAP) > #define RS_FORMAT_A8B8G8R8(RS_FORMAT_A8R8G8B8 | RS_FORMAT_RB_SWAP) > > +#define SWIZ(x,y,z,w) {\ > + PIPE_SWIZZLE_##x, \ > + PIPE_SWIZZLE_##y, \ > + PIPE_SWIZZLE_##z, \ > + PIPE_SWIZZLE_##w\ > +} > + > /* vertex + texture */ > -#define VT(pipe, vtxfmt, texfmt, rsfmt) \ > +#define VT(pipe, vtxfmt, texfmt, texswiz, rsfmt) \ > [PIPE_FORMAT_##pipe] = { \ >.vtx = VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_##vtxfmt, \ >.tex = TEXTURE_FORMAT_##texfmt, \ >.rs = RS_FORMAT_##rsfmt,\ >.present = 1, \ > + .tex_swiz = texswiz,\ > } > > /* texture-only */ > -#define _T(pipe, fmt, rsfmt) \ > +#define _T(pipe, fmt, swiz, rsfmt) \ > [PIPE_FORMAT_##pipe] = {\ >.vtx = ETNA_NO_MATCH,\ >.tex = TEXTURE_FORMAT_##fmt, \ >.rs = RS_FORMAT_##rsfmt, \ >.present = 1,\ > + .tex_swiz = swiz,\ > } > > /* vertex-only */ > @@ -87,9 +97,9 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { > V_(R8_USCALED, UNSIGNED_BYTE, NONE), > V_(R8_SSCALED, BYTE, NONE), > > - _T(A8_UNORM, A8, NONE), > - _T(L8_UNORM, L8, NONE), > - _T(I8_UNORM, I8, NONE), > + _T(A8_UNORM, A8, SWIZ(X, Y, Z, W), NONE), > + _T(L8_UNORM, L8, SWIZ(X, Y, Z, W), NONE), > + _T(I8_UNORM, I8, SWIZ(X, Y, Z, W), NONE), > > /* 16-bit */ > V_(R16_UNORM, UNSIGNED_SHORT, NONE), > @@ -100,15 +110,15 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { > V_(R16_SSCALED, SHORT, NONE), > V_(R16_FLOAT, HALF_FLOAT, NONE), > > - _T(B4G4R4A4_UNORM, A4R4G4B4, A4R4G4B4), > - _T(B4G4R4X4_UNORM, X4R4G4B4, X4R4G4B4), > + _T(B4G4R4A4_UNORM, A4R4G4B4, SWIZ(X, Y, Z, W), A4R4G4B4), > + _T(B4G4R4X4_UNORM, X4R4G4B4, SWIZ(X, Y, Z, W), X4R4G4B4), > > - _T(L8A8_UNORM, A8L8, NONE), > + _T(L8A8_UNORM, A8L8, SWIZ(X, Y, Z, W), NONE), > > - _T(Z16_UNORM, D16, A4R4G4B4), > - _T(B5G6R5_UNORM, R5G6B5, R5G6B5), > - _T(B5G5R5A1_UNORM, A1R5G5B5, A1R5G5B5), > - _T(B5G5R5X1_UNORM, X1R5G5B5, X1R5G5B5), > + _T(Z16_UNORM, D16, SWIZ(X, Y, Z, W), A4R4G4B4), > + _T(B5G6R5_UNORM, R5G6B5, SWIZ(X, Y, Z, W), R5G6B5), > + _T(B5G5R5A1_UNORM, A1R5G5B5, SWIZ(X, Y, Z, W), A1R5G5B5), > + _T(B5G5R5X1_UNORM, X1R5G5B5, SWIZ(X, Y, Z, W), X1R5G5B5), > > V_(R8G8_UNORM, UNSIGNED_BYTE, NONE), > V_(R8G8_SNORM, BYTE, NONE), > @@ -147,25 +157,25 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { > > V_(R8G8B8A8_UNORM, UNSIGNED_BYTE, A8B8G8R8), > V_(R8G8B8A8_SNORM, BYTE, A8B8G8R8), > - _T(R8G8B8X8_UNORM, X8B8G8R8, X8B8G8R8), > + _T(R8G8B8X8_UNORM, X8B8G8R8, SWIZ(X, Y, Z, W), X8B8G8R8), > V_(R8G8B8A8_UINT,UNSIGNED_BYTE, A8B8G8R8), > V_(R8G8B8A8_SINT,BYTE, A8B8G8R8), > V_(R8G8B8A8_USCALED, UNSIGNED_BYTE, A8B8G8R8), > V_(R8G8B8A8_SSCALED, BYTE, A8B8G8R8), > > - _T(R8G8B8A8_UNORM, A8B8G8R8, A8B8G8R8), > - _T(R8G8B8X8_UNORM, X8B8G8R8, X8B8G8R8), > + _T(R8G8B8A8_UNORM, A8B8G8R8, SWIZ(X, Y, Z, W), A8B8G8R8), > + _T(R8G8B8X8_UNORM, X8B8G8R8, SWIZ(X, Y, Z, W), X8B8G8R8), > > - _T(B8G8R8A8_UNORM, A8R8G8B8, A8R8G8B8), > - _T(B8G8R8X8_UNORM, X8R8G8B8, X8R8G8B8), > + _T(B8G8R8A8_UNORM, A8R8G8B8, SWIZ(X, Y, Z, W), A8R8G8B8), > + _T(B8G8R8X8_UNORM, X8R8G8B8, SWIZ(X, Y, Z, W), X8R8G8B8), > > V_(R10G10B10A2_UNORM, UNSIGNED_INT_10_10_10_2, NONE), > V_(R10G10B10A2_SNORM, INT_10_10_10_2, NONE), > V_(R10G10B10A2_USCALED, UNSIGNED_INT_10_10
Re: [Mesa-dev] [PATCH 2/4] etnaviv: add support for swizzled texture formats
Hi 2017-06-22 14:39 GMT+02:00 Wladimir J. van der Laan : > On Wed, Jun 21, 2017 at 10:36:46PM +0200, Christian Gmeiner wrote: >> Passes all ext_texture_swizzle piglits. > > You seem to have dropped the check in etnaviv_screen.c for HALTI0 when texture > formats have implicit non-identity swizzle. > I do think that is necessary as those formats don't work on Yeah I totally overlooked it :( What do you think about something like this: >8--- From ad780e77bfac7ed5c5427ad4b850d3b596558f0a Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Fri, 16 Jun 2017 17:02:29 +0200 Subject: [PATCH] etnaviv: add support for swizzled texture formats Passes all ext_texture_swizzle piglits. Signed-off-by: Christian Gmeiner --- src/gallium/drivers/etnaviv/etnaviv_format.c | 103 ++ src/gallium/drivers/etnaviv/etnaviv_format.h | 7 ++ src/gallium/drivers/etnaviv/etnaviv_screen.c | 19 +++-- src/gallium/drivers/etnaviv/etnaviv_texture.c | 9 +-- 4 files changed, 99 insertions(+), 39 deletions(-) diff --git a/src/gallium/drivers/etnaviv/etnaviv_format.c b/src/gallium/drivers/etnaviv/etnaviv_format.c index e9cd1040b5..ee50b52962 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_format.c +++ b/src/gallium/drivers/etnaviv/etnaviv_format.c @@ -40,6 +40,7 @@ struct etna_format { unsigned tex; unsigned rs; boolean present; + const unsigned char tex_swiz[4]; }; #define RS_FORMAT_NONE ~0 @@ -51,22 +52,31 @@ struct etna_format { #define RS_FORMAT_X8B8G8R8(RS_FORMAT_X8R8G8B8 | RS_FORMAT_RB_SWAP) #define RS_FORMAT_A8B8G8R8(RS_FORMAT_A8R8G8B8 | RS_FORMAT_RB_SWAP) +#define SWIZ(x,y,z,w) {\ + PIPE_SWIZZLE_##x, \ + PIPE_SWIZZLE_##y, \ + PIPE_SWIZZLE_##z, \ + PIPE_SWIZZLE_##w\ +} + /* vertex + texture */ -#define VT(pipe, vtxfmt, texfmt, rsfmt) \ +#define VT(pipe, vtxfmt, texfmt, texswiz, rsfmt) \ [PIPE_FORMAT_##pipe] = { \ .vtx = VIVS_FE_VERTEX_ELEMENT_CONFIG_TYPE_##vtxfmt, \ .tex = TEXTURE_FORMAT_##texfmt, \ .rs = RS_FORMAT_##rsfmt,\ .present = 1, \ + .tex_swiz = texswiz,\ } /* texture-only */ -#define _T(pipe, fmt, rsfmt) \ +#define _T(pipe, fmt, swiz, rsfmt) \ [PIPE_FORMAT_##pipe] = {\ .vtx = ETNA_NO_MATCH,\ .tex = TEXTURE_FORMAT_##fmt, \ .rs = RS_FORMAT_##rsfmt, \ .present = 1,\ + .tex_swiz = swiz,\ } /* vertex-only */ @@ -87,9 +97,9 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { V_(R8_USCALED, UNSIGNED_BYTE, NONE), V_(R8_SSCALED, BYTE, NONE), - _T(A8_UNORM, A8, NONE), - _T(L8_UNORM, L8, NONE), - _T(I8_UNORM, I8, NONE), + _T(A8_UNORM, A8, SWIZ(X, Y, Z, W), NONE), + _T(L8_UNORM, L8, SWIZ(X, Y, Z, W), NONE), + _T(I8_UNORM, I8, SWIZ(X, Y, Z, W), NONE), /* 16-bit */ V_(R16_UNORM, UNSIGNED_SHORT, NONE), @@ -100,15 +110,15 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { V_(R16_SSCALED, SHORT, NONE), V_(R16_FLOAT, HALF_FLOAT, NONE), - _T(B4G4R4A4_UNORM, A4R4G4B4, A4R4G4B4), - _T(B4G4R4X4_UNORM, X4R4G4B4, X4R4G4B4), + _T(B4G4R4A4_UNORM, A4R4G4B4, SWIZ(X, Y, Z, W), A4R4G4B4), + _T(B4G4R4X4_UNORM, X4R4G4B4, SWIZ(X, Y, Z, W), X4R4G4B4), - _T(L8A8_UNORM, A8L8, NONE), + _T(L8A8_UNORM, A8L8, SWIZ(X, Y, Z, W), NONE), - _T(Z16_UNORM, D16, A4R4G4B4), - _T(B5G6R5_UNORM, R5G6B5, R5G6B5), - _T(B5G5R5A1_UNORM, A1R5G5B5, A1R5G5B5), - _T(B5G5R5X1_UNORM, X1R5G5B5, X1R5G5B5), + _T(Z16_UNORM, D16, SWIZ(X, Y, Z, W), A4R4G4B4), + _T(B5G6R5_UNORM, R5G6B5, SWIZ(X, Y, Z, W), R5G6B5), + _T(B5G5R5A1_UNORM, A1R5G5B5, SWIZ(X, Y, Z, W), A1R5G5B5), + _T(B5G5R5X1_UNORM, X1R5G5B5, SWIZ(X, Y, Z, W), X1R5G5B5), V_(R8G8_UNORM, UNSIGNED_BYTE, NONE), V_(R8G8_SNORM, BYTE, NONE), @@ -147,25 +157,25 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = { V_(R8G8B8A8_UNORM, UNSIGNED_BYTE, A8B8G8R8), V_(R8G8B8A8_SNORM, BYTE, A8B8G8R8), - _T(R8G8B8X8_UNORM, X8B8G8R8, X8B8G8R8), + _T(R8G8B8X8_UNORM, X8B8G8R8, SWIZ(X, Y, Z, W), X8B8G8R8), V_(R8G8B8A8_UINT,UNSIGNED_BYTE, A8B8G8R8), V_(R8G8B8A8_SINT,BYTE, A8B8G8R8), V_(R8G8B8A8_USCALED, UNSIGNED_BYTE, A8B8G8R8), V_(R8G8B8A8_SSCALED, BYTE, A8B8G8R8), - _T(R8G8B8A8_UNORM, A8B8G8R8, A8B8G8R8), - _T(R8G8B8X8_UNORM, X8B8G8R8, X8B8G8R8), + _T(R8G8B8A8_UNORM, A8B8G8R8, SWIZ(X, Y, Z, W), A8B8G8R8), + _T(R8G8B8X8_UNORM, X8B8G8R8, SWIZ(X, Y, Z, W), X8B8G8R8), - _T(B8G8R8A8_UNORM, A8R8G8B8, A8R8G8B8), - _T(B8G8R8X8_UNORM, X8R8G8B8, X8R8G8B8), + _T(B8G8R8A8_UNORM, A8R8G8B8, SWIZ(X, Y, Z, W), A8R8G8B8), + _T(B8G8R8X8_UNORM, X8R8G8B8, SWIZ(X, Y, Z,