From dc07473524af4da8b8fd123c124cb166f67cd2f2 Mon Sep 17 00:00:00 2001 From: Anna Maniscalco Date: Thu, 4 Dec 2025 18:11:42 +0100 Subject: [PATCH] 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 Part-of: --- docs/features.txt | 2 +- src/freedreno/common/freedreno_dev_info.h | 2 ++ src/freedreno/common/freedreno_devices.py | 2 ++ src/freedreno/fdl/fd6_format_table.c | 37 +++++++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/docs/features.txt b/docs/features.txt index c6e24875dd0..8605fe0ab42 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -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) diff --git a/src/freedreno/common/freedreno_dev_info.h b/src/freedreno/common/freedreno_dev_info.h index 60211a8fd7a..026ad186041 100644 --- a/src/freedreno/common/freedreno_dev_info.h +++ b/src/freedreno/common/freedreno_dev_info.h @@ -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. */ diff --git a/src/freedreno/common/freedreno_devices.py b/src/freedreno/common/freedreno_devices.py index 25a1024f886..15a2a64272b 100644 --- a/src/freedreno/common/freedreno_devices.py +++ b/src/freedreno/common/freedreno_devices.py @@ -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, diff --git a/src/freedreno/fdl/fd6_format_table.c b/src/freedreno/fdl/fd6_format_table.c index 8d45412daf8..e9793b6ca7d 100644 --- a/src/freedreno/fdl/fd6_format_table.c +++ b/src/freedreno/fdl/fd6_format_table.c @@ -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) {