Module: Mesa Branch: main Commit: 7147313d0a1e06d149e9db42e4ae4115c9081644 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7147313d0a1e06d149e9db42e4ae4115c9081644
Author: Asahi Lina <[email protected]> Date: Sun Jun 19 04:02:24 2022 +0900 asahi: Support XRGB formats Just treat them like ARGB. Not sure if this is sane, but it works for now... Signed-off-by: Asahi Lina <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19606> --- src/asahi/lib/agx_formats.c | 12 ++++++++++++ src/gallium/drivers/asahi/agx_state.c | 8 ++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/asahi/lib/agx_formats.c b/src/asahi/lib/agx_formats.c index 3b6db88215e..81a713adcd8 100644 --- a/src/asahi/lib/agx_formats.c +++ b/src/asahi/lib/agx_formats.c @@ -43,6 +43,10 @@ const struct agx_pixel_format_entry agx_pixel_format[PIPE_FORMAT_COUNT] = { AGX_FMT(A8R8G8B8_UNORM, R8G8B8A8, UNORM, T, U8NORM), AGX_FMT(A8B8G8R8_UNORM, R8G8B8A8, UNORM, T, U8NORM), AGX_FMT(B8G8R8A8_UNORM, R8G8B8A8, UNORM, T, U8NORM), + AGX_FMT(R8G8B8X8_UNORM, R8G8B8A8, UNORM, T, U8NORM), + AGX_FMT(X8R8G8B8_UNORM, R8G8B8A8, UNORM, T, U8NORM), + AGX_FMT(X8B8G8R8_UNORM, R8G8B8A8, UNORM, T, U8NORM), + AGX_FMT(B8G8R8X8_UNORM, R8G8B8A8, UNORM, T, U8NORM), AGX_FMT(R16_UNORM, R16, UNORM, T, U16NORM), AGX_FMT(R16G16_UNORM, R16G16, UNORM, T, U16NORM), @@ -54,6 +58,10 @@ const struct agx_pixel_format_entry agx_pixel_format[PIPE_FORMAT_COUNT] = { AGX_FMT(A8R8G8B8_SRGB, R8G8B8A8, UNORM, T, SRGBA8), AGX_FMT(A8B8G8R8_SRGB, R8G8B8A8, UNORM, T, SRGBA8), AGX_FMT(B8G8R8A8_SRGB, R8G8B8A8, UNORM, T, SRGBA8), + AGX_FMT(R8G8B8X8_SRGB, R8G8B8A8, UNORM, T, SRGBA8), + AGX_FMT(X8R8G8B8_SRGB, R8G8B8A8, UNORM, T, SRGBA8), + AGX_FMT(X8B8G8R8_SRGB, R8G8B8A8, UNORM, T, SRGBA8), + AGX_FMT(B8G8R8X8_SRGB, R8G8B8A8, UNORM, T, SRGBA8), AGX_FMT(R8_SNORM, R8, SNORM, T, S8NORM), AGX_FMT(R8G8_SNORM, R8G8, SNORM, T, S8NORM), @@ -61,6 +69,10 @@ const struct agx_pixel_format_entry agx_pixel_format[PIPE_FORMAT_COUNT] = { AGX_FMT(A8R8G8B8_SNORM, R8G8B8A8, SNORM, T, S8NORM), AGX_FMT(A8B8G8R8_SNORM, R8G8B8A8, SNORM, T, S8NORM), AGX_FMT(B8G8R8A8_SNORM, R8G8B8A8, SNORM, T, S8NORM), + AGX_FMT(R8G8B8X8_SNORM, R8G8B8A8, SNORM, T, S8NORM), + AGX_FMT(X8R8G8B8_SNORM, R8G8B8A8, SNORM, T, S8NORM), + AGX_FMT(X8B8G8R8_SNORM, R8G8B8A8, SNORM, T, S8NORM), + AGX_FMT(B8G8R8X8_SNORM, R8G8B8A8, SNORM, T, S8NORM), AGX_FMT(R16_FLOAT, R16, FLOAT, T, F16), AGX_FMT(R16G16_FLOAT, R16G16, FLOAT, T, F16), diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c index 085506c8413..e843613d108 100644 --- a/src/gallium/drivers/asahi/agx_state.c +++ b/src/gallium/drivers/asahi/agx_state.c @@ -783,16 +783,16 @@ agx_set_framebuffer_state(struct pipe_context *pctx, cfg.type = agx_pixel_format[surf->format].type; assert(desc->nr_channels >= 1 && desc->nr_channels <= 4); - cfg.swizzle_r = agx_channel_from_pipe(desc->swizzle[0]); + cfg.swizzle_r = agx_channel_from_pipe(desc->swizzle[0]) & 3; if (desc->nr_channels >= 2) - cfg.swizzle_g = agx_channel_from_pipe(desc->swizzle[1]); + cfg.swizzle_g = agx_channel_from_pipe(desc->swizzle[1]) & 3; if (desc->nr_channels >= 3) - cfg.swizzle_b = agx_channel_from_pipe(desc->swizzle[2]); + cfg.swizzle_b = agx_channel_from_pipe(desc->swizzle[2]) & 3; if (desc->nr_channels >= 4) - cfg.swizzle_a = agx_channel_from_pipe(desc->swizzle[3]); + cfg.swizzle_a = agx_channel_from_pipe(desc->swizzle[3]) & 3; cfg.width = state->width; cfg.height = state->height;
