From 6d3f266406616f85dafc69c8ac75cef996a278b2 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Fri, 27 Jun 2025 10:19:55 -0700 Subject: [PATCH] dri: Add additional 16/32b float/int formats Add additional 16 and 32b float formats, and the missing BGR161616. For the dri2_format_table, just use the pipe formats twice, rather than introducing new __DRI_IMAGE_FORMAT_x in this day and age (they are the same thing). Signed-off-by: Rob Clark Reviewed-by: Timothy Arceri Part-of: --- src/egl/drivers/dri2/egl_dri2.c | 8 ++++++++ src/gallium/frontends/dri/dri_helpers.c | 16 ++++++++++++++++ src/loader/loader_dri_helper.c | 8 ++++++++ 3 files changed, 32 insertions(+) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 523ca94de77..3e9b486eecf 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -2169,7 +2169,15 @@ dri2_num_fourcc_format_planes(EGLint format) case DRM_FORMAT_RG88: case DRM_FORMAT_GR88: case DRM_FORMAT_R16: + case DRM_FORMAT_R16F: + case DRM_FORMAT_R32F: case DRM_FORMAT_GR1616: + case DRM_FORMAT_GR1616F: + case DRM_FORMAT_GR3232F: + case DRM_FORMAT_BGR161616: + case DRM_FORMAT_BGR161616F: + case DRM_FORMAT_BGR323232F: + case DRM_FORMAT_ABGR32323232F: case DRM_FORMAT_RGB332: case DRM_FORMAT_BGR233: case DRM_FORMAT_XRGB4444: diff --git a/src/gallium/frontends/dri/dri_helpers.c b/src/gallium/frontends/dri/dri_helpers.c index 9f23f6c779d..c6cf873069d 100644 --- a/src/gallium/frontends/dri/dri_helpers.c +++ b/src/gallium/frontends/dri/dri_helpers.c @@ -457,6 +457,22 @@ static const struct dri2_format_mapping dri2_format_table[] = { PIPE_FORMAT_RG88_UNORM, 1, }, { DRM_FORMAT_GR1616, __DRI_IMAGE_FORMAT_GR1616, PIPE_FORMAT_RG1616_UNORM, 1, }, + { DRM_FORMAT_R16F, PIPE_FORMAT_R16_FLOAT, + PIPE_FORMAT_R16_FLOAT, 1 }, + { DRM_FORMAT_R32F, PIPE_FORMAT_R32_FLOAT, + PIPE_FORMAT_R32_FLOAT, 1 }, + { DRM_FORMAT_GR1616F, PIPE_FORMAT_R16G16_FLOAT, + PIPE_FORMAT_R16G16_FLOAT, 1 }, + { DRM_FORMAT_GR3232F, PIPE_FORMAT_R32G32_FLOAT, + PIPE_FORMAT_R32G32_FLOAT, 1 }, + { DRM_FORMAT_BGR161616, PIPE_FORMAT_R16G16B16_UNORM, + PIPE_FORMAT_R16G16B16_UNORM, 1 }, + { DRM_FORMAT_BGR161616F, PIPE_FORMAT_R16G16B16_FLOAT, + PIPE_FORMAT_R16G16B16_FLOAT, 1 }, + { DRM_FORMAT_BGR323232F, PIPE_FORMAT_R32G32B32_FLOAT, + PIPE_FORMAT_R32G32B32_FLOAT, 1 }, + { DRM_FORMAT_ABGR32323232F, PIPE_FORMAT_R32G32B32A32_FLOAT, + PIPE_FORMAT_R32G32B32A32_FLOAT, 1 }, /* * YUV formats: diff --git a/src/loader/loader_dri_helper.c b/src/loader/loader_dri_helper.c index 7d8ea3f65c9..1d200bc3266 100644 --- a/src/loader/loader_dri_helper.c +++ b/src/loader/loader_dri_helper.c @@ -68,6 +68,14 @@ static const struct { { PIPE_FORMAT_R16G16B16A16_UNORM, DRM_FORMAT_ABGR16161616 }, { PIPE_FORMAT_R16G16B16X16_FLOAT, DRM_FORMAT_XBGR16161616F }, { PIPE_FORMAT_R16G16B16A16_FLOAT, DRM_FORMAT_ABGR16161616F }, + { PIPE_FORMAT_R16_FLOAT, DRM_FORMAT_R16F }, + { PIPE_FORMAT_R32_FLOAT, DRM_FORMAT_R32F }, + { PIPE_FORMAT_R16G16_FLOAT, DRM_FORMAT_GR1616F }, + { PIPE_FORMAT_R32G32_FLOAT, DRM_FORMAT_GR3232F }, + { PIPE_FORMAT_R16G16B16_UNORM, DRM_FORMAT_BGR161616 }, + { PIPE_FORMAT_R16G16B16_FLOAT, DRM_FORMAT_BGR161616F }, + { PIPE_FORMAT_R32G32B32_FLOAT, DRM_FORMAT_BGR323232F }, + { PIPE_FORMAT_R32G32B32A32_FLOAT, DRM_FORMAT_ABGR32323232F }, }; enum pipe_format