freedreno/fdl: add astc hdr formats

Add astc hdr (float) formats, those get treated identically as the ldr
formats as the blocks have enough metadata to be decoded as float.

Reviewed-by: Rob Clark <rob.clark@oss.qualcomm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38859>
This commit is contained in:
Anna Maniscalco 2025-12-04 18:11:42 +01:00
parent c8ce0df2d2
commit dc07473524
4 changed files with 42 additions and 1 deletions

View file

@ -347,7 +347,7 @@ Khronos, ARB, and OES extensions that are not part of any OpenGL or OpenGL ES ve
GL_KHR_blend_equation_advanced_coherent DONE (freedreno/a6xx, llvmpipe, panfrost, zink, asahi, iris/gen9+, v3d)
GL_KHR_robust_buffer_access_behavior DONE (panfrost, llvmpipe, virgl)
GL_KHR_shader_subgroup DONE (radeonsi, zink, asahi, iris/gen9+)
GL_KHR_texture_compression_astc_hdr DONE (panfrost, asahi)
GL_KHR_texture_compression_astc_hdr DONE (freedreno, panfrost, asahi)
GL_KHR_texture_compression_astc_sliced_3d DONE (freedreno/a4xx+, r600, radeonsi, panfrost, softpipe, llvmpipe, v3d, virgl, zink, lima, asahi, iris/gen9+)
GL_OES_depth_texture_cube_map DONE (all drivers that support GLSL 1.30+)
GL_OES_EGL_image DONE (all drivers)

View file

@ -210,6 +210,8 @@ struct fd_dev_info {
bool has_sampler_minmax;
bool has_astc_hdr;
bool broken_ds_ubwc_quirk;
/* See ir3_compiler::has_scalar_alu. */

View file

@ -320,6 +320,7 @@ a6xx_base = GPUProps(
has_hw_multiview = True,
has_fs_tex_prefetch = True,
has_sampler_minmax = True,
has_astc_hdr = True,
supports_double_threadsize = True,
@ -349,6 +350,7 @@ a6xx_gen1_low = GPUProps(
has_gmem_fast_clear = False,
has_hw_multiview = False,
has_sampler_minmax = False,
has_astc_hdr = False,
has_fs_tex_prefetch = False,
sysmem_per_ccu_color_cache_size = 8 * 1024,
sysmem_per_ccu_depth_cache_size = 8 * 1024,

View file

@ -358,6 +358,21 @@ static const struct fd6_format formats[PIPE_FORMAT_COUNT] = {
_T_(ASTC_12x10_SRGB, ASTC_12x10, WZYX),
_T_(ASTC_12x12_SRGB, ASTC_12x12, WZYX),
_T_(ASTC_4x4_FLOAT, ASTC_4x4, WZYX),
_T_(ASTC_5x4_FLOAT, ASTC_5x4, WZYX),
_T_(ASTC_5x5_FLOAT, ASTC_5x5, WZYX),
_T_(ASTC_6x5_FLOAT, ASTC_6x5, WZYX),
_T_(ASTC_6x6_FLOAT, ASTC_6x6, WZYX),
_T_(ASTC_8x5_FLOAT, ASTC_8x5, WZYX),
_T_(ASTC_8x6_FLOAT, ASTC_8x6, WZYX),
_T_(ASTC_8x8_FLOAT, ASTC_8x8, WZYX),
_T_(ASTC_10x5_FLOAT, ASTC_10x5, WZYX),
_T_(ASTC_10x6_FLOAT, ASTC_10x6, WZYX),
_T_(ASTC_10x8_FLOAT, ASTC_10x8, WZYX),
_T_(ASTC_10x10_FLOAT, ASTC_10x10, WZYX),
_T_(ASTC_12x10_FLOAT, ASTC_12x10, WZYX),
_T_(ASTC_12x12_FLOAT, ASTC_12x12, WZYX),
_T_(G8B8_G8R8_UNORM, R8G8R8B8_422_UNORM, WZYX), /* YUYV */
_T_(B8G8_R8G8_UNORM, G8R8B8R8_422_UNORM, WZYX), /* UYVY */
@ -432,6 +447,28 @@ bool
fd6_texture_format_supported(const struct fd_dev_info *info, enum pipe_format format,
enum a6xx_tile_mode tile_mode, bool is_mutable)
{
if (!info->props.has_astc_hdr) {
/* ASTC HDR formats are removed */
switch (format) {
case PIPE_FORMAT_ASTC_4x4_FLOAT:
case PIPE_FORMAT_ASTC_5x4_FLOAT:
case PIPE_FORMAT_ASTC_5x5_FLOAT:
case PIPE_FORMAT_ASTC_6x5_FLOAT:
case PIPE_FORMAT_ASTC_6x6_FLOAT:
case PIPE_FORMAT_ASTC_8x5_FLOAT:
case PIPE_FORMAT_ASTC_8x6_FLOAT:
case PIPE_FORMAT_ASTC_8x8_FLOAT:
case PIPE_FORMAT_ASTC_10x5_FLOAT:
case PIPE_FORMAT_ASTC_10x6_FLOAT:
case PIPE_FORMAT_ASTC_10x8_FLOAT:
case PIPE_FORMAT_ASTC_10x10_FLOAT:
case PIPE_FORMAT_ASTC_12x10_FLOAT:
case PIPE_FORMAT_ASTC_12x12_FLOAT:
return false;
default:
break;
}
}
if (info->props.is_a702) {
/* BPTC is removed */
switch (format) {