[Mesa-dev] [PATCH 04/28] r200: use preprocessor for big vs little endian checks
Dylan Baker
dylan at pnwbakers.com
Fri Nov 9 23:52:05 UTC 2018
Quoting Timothy Arceri (2018-11-09 13:45:27)
> On 10/11/18 5:39 am, Dylan Baker wrote:
> > Instead of using a function at runtime we can just build the right code
> > for the right platform.
> > ---
> > src/mesa/drivers/dri/r200/r200_blit.c | 76 ++++++++++-------------
> > src/mesa/drivers/dri/r200/r200_texstate.c | 7 ++-
> > 2 files changed, 38 insertions(+), 45 deletions(-)
> >
> > diff --git a/src/mesa/drivers/dri/r200/r200_blit.c b/src/mesa/drivers/dri/r200/r200_blit.c
> > index d68a53e67f7..90a88bddff8 100644
> > --- a/src/mesa/drivers/dri/r200/r200_blit.c
> > +++ b/src/mesa/drivers/dri/r200/r200_blit.c
> > @@ -42,41 +42,29 @@ static inline uint32_t cmdpacket0(struct radeon_screen *rscrn,
> > unsigned r200_check_blit(mesa_format mesa_format, uint32_t dst_pitch)
> > {
> > /* XXX others? */
> > - if (_mesa_little_endian()) {
> > - switch (mesa_format) {
> > - case MESA_FORMAT_B8G8R8A8_UNORM:
> > - case MESA_FORMAT_B8G8R8X8_UNORM:
> > - case MESA_FORMAT_B5G6R5_UNORM:
> > - case MESA_FORMAT_B4G4R4A4_UNORM:
> > - case MESA_FORMAT_B5G5R5A1_UNORM:
> > - case MESA_FORMAT_A_UNORM8:
> > - case MESA_FORMAT_L_UNORM8:
> > - case MESA_FORMAT_I_UNORM8:
> > - /* swizzled - probably can't happen with the disabled Choose8888TexFormat code */
> > - case MESA_FORMAT_A8B8G8R8_UNORM:
> > - case MESA_FORMAT_R8G8B8A8_UNORM:
> > - break;
> > - default:
> > - return 0;
> > - }
> > - }
> > - else {
> > - switch (mesa_format) {
> > - case MESA_FORMAT_A8R8G8B8_UNORM:
> > - case MESA_FORMAT_X8R8G8B8_UNORM:
> > - case MESA_FORMAT_R5G6B5_UNORM:
> > - case MESA_FORMAT_A4R4G4B4_UNORM:
> > - case MESA_FORMAT_A1R5G5B5_UNORM:
> > - case MESA_FORMAT_A_UNORM8:
> > - case MESA_FORMAT_L_UNORM8:
> > - case MESA_FORMAT_I_UNORM8:
> > - /* swizzled - probably can't happen with the disabled Choose8888TexFormat code */
> > - case MESA_FORMAT_R8G8B8A8_UNORM:
> > - case MESA_FORMAT_A8B8G8R8_UNORM:
> > - break;
> > - default:
> > - return 0;
> > - }
> > + switch (mesa_format) {
> > +#ifdef PIPE_ARCH_LITTLE_ENDIAN
>
> I know this is an existing thing but PIPE_ is a galliumisim. IMO we
> should probably rename this before using it more generally:
>
> PIPE_ARCH_LITTLE_ENDIAN -> UTIL_ARCH_LITTLE_ENDIAN ???
Honestly I don't know why we're using a header to figure out our endianness. GCC
has a builtin declaration for this, and the build system should be able to fill
it in otherwise.
I think I'll just respin with that.
>
>
> > + case MESA_FORMAT_B8G8R8A8_UNORM:
> > + case MESA_FORMAT_B8G8R8X8_UNORM:
> > + case MESA_FORMAT_B5G6R5_UNORM:
> > + case MESA_FORMAT_B4G4R4A4_UNORM:
> > + case MESA_FORMAT_B5G5R5A1_UNORM:
> > +#else
> > + case MESA_FORMAT_A8R8G8B8_UNORM:
> > + case MESA_FORMAT_X8R8G8B8_UNORM:
> > + case MESA_FORMAT_R5G6B5_UNORM:
> > + case MESA_FORMAT_A4R4G4B4_UNORM:
> > + case MESA_FORMAT_A1R5G5B5_UNORM:
> > +#endif
> > + case MESA_FORMAT_A_UNORM8:
> > + case MESA_FORMAT_L_UNORM8:
> > + case MESA_FORMAT_I_UNORM8:
> > + /* swizzled - probably can't happen with the disabled Choose8888TexFormat code */
> > + case MESA_FORMAT_A8B8G8R8_UNORM:
> > + case MESA_FORMAT_R8G8B8A8_UNORM:
> > + break;
> > + default:
> > + return 0;
> > }
> >
> > /* Rendering to small buffer doesn't work.
> > @@ -133,12 +121,11 @@ static void inline emit_tx_setup(struct r200_context *r200,
> > assert(height <= 2048);
> > assert(offset % 32 == 0);
> >
> > - if (_mesa_little_endian()) {
> > - txformat |= tx_table_le[src_mesa_format].format;
> > - }
> > - else {
> > - txformat |= tx_table_be[src_mesa_format].format;
> > - }
> > +#ifdef PIPE_ARCH_LITTLE_ENDIAN
> > + txformat |= tx_table_le[src_mesa_format].format;
> > +#else
> > + txformat |= tx_table_be[src_mesa_format].format;
> > +#endif
> >
> > if (bo->flags & RADEON_BO_FLAGS_MACRO_TILE)
> > offset |= R200_TXO_MACRO_TILE;
> > @@ -183,8 +170,11 @@ static void inline emit_tx_setup(struct r200_context *r200,
> > break;
> > case MESA_FORMAT_A8B8G8R8_UNORM:
> > case MESA_FORMAT_R8G8B8A8_UNORM:
> > - if ((dst_mesa_format == MESA_FORMAT_A8B8G8R8_UNORM && _mesa_little_endian()) ||
> > - (dst_mesa_format == MESA_FORMAT_R8G8B8A8_UNORM && !_mesa_little_endian())) {
> > +#ifdef PIPE_ARCH_LITTLE_ENDIAN
> > + if (dst_mesa_format == MESA_FORMAT_A8B8G8R8_UNORM) {
> > +#else
> > + if (dst_mesa_format == MESA_FORMAT_R8G8B8A8_UNORM) {
> > +#endif
> > BEGIN_BATCH(10);
> > OUT_BATCH_REGVAL(RADEON_PP_CNTL, (RADEON_TEX_0_ENABLE |
> > RADEON_TEX_BLEND_0_ENABLE));
> > diff --git a/src/mesa/drivers/dri/r200/r200_texstate.c b/src/mesa/drivers/dri/r200/r200_texstate.c
> > index 60a20071d97..4718d3f4d25 100644
> > --- a/src/mesa/drivers/dri/r200/r200_texstate.c
> > +++ b/src/mesa/drivers/dri/r200/r200_texstate.c
> > @@ -1314,8 +1314,11 @@ static void setup_hardware_state(r200ContextPtr rmesa, radeonTexObj *t)
> >
> > if (!t->image_override) {
> > if (VALID_FORMAT(firstImage->TexFormat)) {
> > - const struct tx_table *table = _mesa_little_endian() ? tx_table_le :
> > - tx_table_be;
> > +#ifdef PIPE_ARCH_LITTLE_ENDIAN
> > + const struct tx_table *table = tx_table_le;
> > +#else
> > + const struct tx_table *table = tx_table_be;
> > +#endif
> >
> > t->pp_txformat &= ~(R200_TXFORMAT_FORMAT_MASK |
> > R200_TXFORMAT_ALPHA_IN_MAP);
> >
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20181109/ad2d496a/attachment-0001.sig>
More information about the mesa-dev
mailing list