I think we shouldn't be getting PIPE_FORMAT_COUNT in is_format_supported in the first place, and therefore drivers don't have to work around it.
Marek On Tue, Sep 12, 2017 at 10:38 PM, Denis Pauk <pauk.de...@gmail.com> wrote: > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102552 > > v2: Patch cleanup proposed by Nicolai Hähnle. > * deleted changes in si_translate_texformat. > > Cc: Nicolai Hähnle <nhaeh...@gmail.com> > Cc: Ilia Mirkin <imir...@alum.mit.edu> > --- > src/gallium/auxiliary/util/u_format.c | 4 ++++ > src/gallium/drivers/r600/r600_state_common.c | 4 ++++ > src/gallium/drivers/radeonsi/si_state.c | 10 +++++++++- > 3 files changed, 17 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/auxiliary/util/u_format.c > b/src/gallium/auxiliary/util/u_format.c > index 3d281905ce..a6d42a428d 100644 > --- a/src/gallium/auxiliary/util/u_format.c > +++ b/src/gallium/auxiliary/util/u_format.c > @@ -238,6 +238,10 @@ util_format_is_subsampled_422(enum pipe_format format) > boolean > util_format_is_supported(enum pipe_format format, unsigned bind) > { > + if (format >= PIPE_FORMAT_COUNT) { > + return FALSE; > + } > + > if (util_format_is_s3tc(format) && !util_format_s3tc_enabled) { > return FALSE; > } > diff --git a/src/gallium/drivers/r600/r600_state_common.c > b/src/gallium/drivers/r600/r600_state_common.c > index c1bce8304b..1515c28091 100644 > --- a/src/gallium/drivers/r600/r600_state_common.c > +++ b/src/gallium/drivers/r600/r600_state_common.c > @@ -2284,6 +2284,8 @@ uint32_t r600_translate_texformat(struct pipe_screen > *screen, > format = PIPE_FORMAT_A4R4_UNORM; > > desc = util_format_description(format); > + if (!desc) > + goto out_unknown; > > /* Depth and stencil swizzling is handled separately. */ > if (desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS) { > @@ -2650,6 +2652,8 @@ uint32_t r600_translate_colorformat(enum chip_class > chip, enum pipe_format forma > const struct util_format_description *desc = > util_format_description(format); > int channel = util_format_get_first_non_void_channel(format); > bool is_float; > + if (!desc) > + return ~0U; > > #define HAS_SIZE(x,y,z,w) \ > (desc->channel[0].size == (x) && desc->channel[1].size == (y) && \ > diff --git a/src/gallium/drivers/radeonsi/si_state.c > b/src/gallium/drivers/radeonsi/si_state.c > index ee070107fd..f7ee24bdc6 100644 > --- a/src/gallium/drivers/radeonsi/si_state.c > +++ b/src/gallium/drivers/radeonsi/si_state.c > @@ -1292,6 +1292,8 @@ static void si_emit_db_render_state(struct si_context > *sctx, struct r600_atom *s > static uint32_t si_translate_colorformat(enum pipe_format format) > { > const struct util_format_description *desc = > util_format_description(format); > + if (!desc) > + return V_028C70_COLOR_INVALID; > > #define HAS_SIZE(x,y,z,w) \ > (desc->channel[0].size == (x) && desc->channel[1].size == (y) && \ > @@ -1796,7 +1798,11 @@ static unsigned si_tex_dim(struct si_screen *sscreen, > struct r600_texture *rtex, > > static bool si_is_sampler_format_supported(struct pipe_screen *screen, enum > pipe_format format) > { > - return si_translate_texformat(screen, format, > util_format_description(format), > + struct util_format_description *desc = > util_format_description(format); > + if (!desc) > + return false; > + > + return si_translate_texformat(screen, format, desc, > > util_format_get_first_non_void_channel(format)) != ~0U; > } > > @@ -1925,6 +1931,8 @@ static unsigned si_is_vertex_format_supported(struct > pipe_screen *screen, > PIPE_BIND_VERTEX_BUFFER)) == 0); > > desc = util_format_description(format); > + if (!desc) > + return 0; > > /* There are no native 8_8_8 or 16_16_16 data formats, and we > currently > * select 8_8_8_8 and 16_16_16_16 instead. This works reasonably well > -- > 2.14.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev