diff --git a/src/freedreno/fdl/fd6_format_table.c b/src/freedreno/fdl/fd6_format_table.c index 653f0547bc4..029885be3c7 100644 --- a/src/freedreno/fdl/fd6_format_table.c +++ b/src/freedreno/fdl/fd6_format_table.c @@ -421,6 +421,13 @@ fd6_texture_format(enum pipe_format format, enum a6xx_tile_mode tile_mode, return formats[format].tex; } +bool +fd6_texture_format_supported(const struct fd_dev_info *info, enum pipe_format format, + enum a6xx_tile_mode tile_mode, bool is_mutable) +{ + return fd6_texture_format(format, tile_mode, is_mutable) != FMT6_NONE; +} + enum a3xx_color_swap fd6_texture_swap(enum pipe_format format, enum a6xx_tile_mode tile_mode, bool is_mutable) diff --git a/src/freedreno/fdl/fd6_format_table.h b/src/freedreno/fdl/fd6_format_table.h index 062233a99cf..56fb259b010 100644 --- a/src/freedreno/fdl/fd6_format_table.h +++ b/src/freedreno/fdl/fd6_format_table.h @@ -21,6 +21,8 @@ BEGINC; +struct fd_dev_info; + static inline enum a6xx_tex_swiz fdl6_swiz(unsigned char swiz) { @@ -40,6 +42,9 @@ enum a3xx_color_swap fd6_vertex_swap(enum pipe_format format) ATTRIBUTE_CONST; enum a6xx_format fd6_texture_format(enum pipe_format format, enum a6xx_tile_mode tile_mode, bool is_mutable) ATTRIBUTE_CONST; +bool fd6_texture_format_supported(const struct fd_dev_info *info, enum pipe_format format, + enum a6xx_tile_mode tile_mode, bool is_mutable) + ATTRIBUTE_CONST; enum a3xx_color_swap fd6_texture_swap(enum pipe_format format, enum a6xx_tile_mode tile_mode, bool is_mutable) ATTRIBUTE_CONST; diff --git a/src/freedreno/vulkan/tu_formats.cc b/src/freedreno/vulkan/tu_formats.cc index cb134a979c6..11947e67d55 100644 --- a/src/freedreno/vulkan/tu_formats.cc +++ b/src/freedreno/vulkan/tu_formats.cc @@ -56,12 +56,6 @@ tu6_format_color(enum pipe_format format, enum a6xx_tile_mode tile_mode, return fmt; } -static bool -tu6_format_texture_supported(enum pipe_format format) -{ - return fd6_texture_format(format, TILE6_LINEAR, false) != FMT6_NONE; -} - struct tu_native_format tu6_format_texture(enum pipe_format format, enum a6xx_tile_mode tile_mode, bool is_mutable) @@ -119,7 +113,8 @@ tu_physical_device_get_format_properties( bool supported_vtx = tu6_format_vtx_supported(format); bool supported_color = tu6_format_color_supported(format); - bool supported_tex = tu6_format_texture_supported(format); + bool supported_tex = fd6_texture_format_supported(physical_device->info, format, + TILE6_LINEAR, false); bool is_npot = !util_is_power_of_two_or_zero(desc->block.bits); if (format == PIPE_FORMAT_NONE || diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_screen.cc b/src/gallium/drivers/freedreno/a6xx/fd6_screen.cc index 1b8ad6add26..0b593cef4f4 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_screen.cc +++ b/src/gallium/drivers/freedreno/a6xx/fd6_screen.cc @@ -46,6 +46,7 @@ fd6_screen_is_format_supported(struct pipe_screen *pscreen, unsigned sample_count, unsigned storage_sample_count, unsigned usage) { + struct fd_screen *screen = fd_screen(pscreen); unsigned retval = 0; if ((target >= PIPE_MAX_TEXTURE_TYPES) || @@ -64,7 +65,7 @@ fd6_screen_is_format_supported(struct pipe_screen *pscreen, } bool has_color = fd6_color_format(format, TILE6_LINEAR) != FMT6_NONE; - bool has_tex = fd6_texture_format(format, TILE6_LINEAR, false) != FMT6_NONE; + bool has_tex = fd6_texture_format_supported(screen->info, format, TILE6_LINEAR, false); if ((usage & (PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_SHADER_IMAGE)) && has_tex &&