[PATCH v2 1/4] etnaviv: implement ETC2 block patching for HALTI0
Christian Gmeiner
christian.gmeiner at gmail.com
Wed Feb 27 15:13:12 UTC 2019
Hi Lucas
Am Mi., 27. Feb. 2019 um 10:22 Uhr schrieb Lucas Stach <l.stach at pengutronix.de>:
>
> Am Dienstag, den 26.02.2019, 19:15 +0100 schrieb Christian Gmeiner:
> > ETC2 is supported with HALTI0, however that implementation is buggy
> > in hardware. The blob driver does per-block patching to work around
> > this. We need to swap colors for t-mode etc2 blocks.
> >
> > > Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
> > ---
> > src/gallium/drivers/etnaviv/Makefile.sources | 2 +
> > src/gallium/drivers/etnaviv/etnaviv_etc2.c | 149 +++++++++++++++++++
> > src/gallium/drivers/etnaviv/etnaviv_etc2.h | 51 +++++++
> > src/gallium/drivers/etnaviv/meson.build | 2 +
> > 4 files changed, 204 insertions(+)
> > create mode 100644 src/gallium/drivers/etnaviv/etnaviv_etc2.c
> > create mode 100644 src/gallium/drivers/etnaviv/etnaviv_etc2.h
> >
> > diff --git a/src/gallium/drivers/etnaviv/Makefile.sources b/src/gallium/drivers/etnaviv/Makefile.sources
> > index 0b208122999..01e7e49a38a 100644
> > --- a/src/gallium/drivers/etnaviv/Makefile.sources
> > +++ b/src/gallium/drivers/etnaviv/Makefile.sources
> > @@ -25,6 +25,8 @@ C_SOURCES := \
> > > etnaviv_disasm.h \
> > > etnaviv_emit.c \
> > > etnaviv_emit.h \
> > > + etnaviv_etc2.c \
> > > + etnaviv_etc2.h \
> > > etnaviv_fence.c \
> > > etnaviv_fence.h \
> > > etnaviv_format.c \
> > diff --git a/src/gallium/drivers/etnaviv/etnaviv_etc2.c b/src/gallium/drivers/etnaviv/etnaviv_etc2.c
> > new file mode 100644
> > index 00000000000..64811c3038d
> > --- /dev/null
> > +++ b/src/gallium/drivers/etnaviv/etnaviv_etc2.c
> > @@ -0,0 +1,149 @@
> > +/*
> > + * Copyright (c) 2019 Etnaviv Project
> > + * Copyright (C) 2019 Zodiac Inflight Innovations
> > + *
> > + * Permission is hereby granted, free of charge, to any person obtaining a
> > + * copy of this software and associated documentation files (the "Software"),
> > + * to deal in the Software without restriction, including without limitation
> > + * the rights to use, copy, modify, merge, publish, distribute, sub license,
> > + * and/or sell copies of the Software, and to permit persons to whom the
> > + * Software is furnished to do so, subject to the following conditions:
> > + *
> > + * The above copyright notice and this permission notice (including the
> > + * next paragraph) shall be included in all copies or substantial portions
> > + * of the Software.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> > + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
> > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> > + * DEALINGS IN THE SOFTWARE.
> > + *
> > + * Authors:
> > > + * Christian Gmeiner <christian.gmeiner at gmail.com>
> > + */
> > +
> > +#include "etnaviv_etc2.h"
> > +#include "etnaviv_resource.h"
> > +#include "etnaviv_screen.h"
> > +#include "hw/common.xml.h"
> > +#include "util/u_format.h"
> > +
> > +bool
> > +etna_etc2_needs_patching(const struct pipe_resource *prsc)
> > +{
> > + const struct etna_screen *screen = etna_screen(prsc->screen);
> > +
> > + if (!util_format_is_etc(prsc->format))
> > + return false;
> > +
> > + if (prsc->format == PIPE_FORMAT_ETC1_RGB8)
> > + return false;
>
> Isn't this format check redundant with the default case of the switch
> below?
>
As util_format_is_etc(..) fires for etc1 and etc2 I thought to be more
explicit here, but
I am fine to remove it.
--
greets
--
Christian Gmeiner, MSc
https://christian-gmeiner.info
More information about the etnaviv
mailing list