From 96a9625866b31b3cb11a4ea7c267f8efcfb2aa4a Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 17 May 2024 14:08:36 +0200 Subject: [PATCH] ac,radv,radeonsi: add a function to get the color format endian swap Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/common/ac_formats.c | 44 ++++++++++++++++++++++ src/amd/common/ac_formats.h | 3 ++ src/amd/vulkan/radv_device.c | 2 +- src/amd/vulkan/radv_formats.c | 43 ---------------------- src/amd/vulkan/radv_formats.h | 2 - src/gallium/drivers/radeonsi/si_state.c | 49 +------------------------ 6 files changed, 49 insertions(+), 94 deletions(-) diff --git a/src/amd/common/ac_formats.c b/src/amd/common/ac_formats.c index 25fd636a1c5..01d4a26584f 100644 --- a/src/amd/common/ac_formats.c +++ b/src/amd/common/ac_formats.c @@ -257,6 +257,50 @@ ac_translate_colorswap(enum amd_gfx_level gfx_level, enum pipe_format format, bo return ~0U; } +uint32_t +ac_colorformat_endian_swap(uint32_t colorformat) +{ + if (UTIL_ARCH_BIG_ENDIAN) { + switch (colorformat) { + /* 8-bit buffers. */ + case V_028C70_COLOR_8: + return V_028C70_ENDIAN_NONE; + + /* 16-bit buffers. */ + case V_028C70_COLOR_5_6_5: + case V_028C70_COLOR_1_5_5_5: + case V_028C70_COLOR_4_4_4_4: + case V_028C70_COLOR_16: + case V_028C70_COLOR_8_8: + return V_028C70_ENDIAN_8IN16; + + /* 32-bit buffers. */ + case V_028C70_COLOR_8_8_8_8: + case V_028C70_COLOR_2_10_10_10: + case V_028C70_COLOR_10_10_10_2: + case V_028C70_COLOR_8_24: + case V_028C70_COLOR_24_8: + case V_028C70_COLOR_16_16: + return V_028C70_ENDIAN_8IN32; + + /* 64-bit buffers. */ + case V_028C70_COLOR_16_16_16_16: + return V_028C70_ENDIAN_8IN16; + + case V_028C70_COLOR_32_32: + return V_028C70_ENDIAN_8IN32; + + /* 128-bit buffers. */ + case V_028C70_COLOR_32_32_32_32: + return V_028C70_ENDIAN_8IN32; + default: + return V_028C70_ENDIAN_NONE; /* Unsupported. */ + } + } else { + return V_028C70_ENDIAN_NONE; + } +} + uint32_t ac_translate_dbformat(enum pipe_format format) { diff --git a/src/amd/common/ac_formats.h b/src/amd/common/ac_formats.h index 4e7ff0bdc3d..9c3449242f0 100644 --- a/src/amd/common/ac_formats.h +++ b/src/amd/common/ac_formats.h @@ -33,6 +33,9 @@ ac_translate_colorswap(enum amd_gfx_level gfx_level, enum pipe_format format, bool do_endian_swap); +uint32_t +ac_colorformat_endian_swap(uint32_t colorformat); + uint32_t ac_translate_dbformat(enum pipe_format format); diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 57405e217be..158ae95ba2a 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -1686,7 +1686,7 @@ radv_initialise_color_surface(struct radv_device *device, struct radv_color_buff assert(format != V_028C70_COLOR_INVALID); swap = ac_translate_colorswap(pdev->info.gfx_level, vk_format_to_pipe_format(iview->vk.format), false); - endian = radv_colorformat_endian_swap(format); + endian = ac_colorformat_endian_swap(format); /* blend clamp should be set for all NORM/SRGB types */ if (ntype == V_028C70_NUMBER_UNORM || ntype == V_028C70_NUMBER_SNORM || ntype == V_028C70_NUMBER_SRGB) diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c index 815e91335f3..543c5497c8e 100644 --- a/src/amd/vulkan/radv_formats.c +++ b/src/amd/vulkan/radv_formats.c @@ -803,49 +803,6 @@ radv_physical_device_get_format_properties(struct radv_physical_device *pdev, Vk out_properties->bufferFeatures = buffer; } -uint32_t -radv_colorformat_endian_swap(uint32_t colorformat) -{ - if (0 /*UTIL_ARCH_BIG_ENDIAN*/) { - switch (colorformat) { - /* 8-bit buffers. */ - case V_028C70_COLOR_8: - return V_028C70_ENDIAN_NONE; - - /* 16-bit buffers. */ - case V_028C70_COLOR_5_6_5: - case V_028C70_COLOR_1_5_5_5: - case V_028C70_COLOR_4_4_4_4: - case V_028C70_COLOR_16: - case V_028C70_COLOR_8_8: - return V_028C70_ENDIAN_8IN16; - - /* 32-bit buffers. */ - case V_028C70_COLOR_8_8_8_8: - case V_028C70_COLOR_2_10_10_10: - case V_028C70_COLOR_8_24: - case V_028C70_COLOR_24_8: - case V_028C70_COLOR_16_16: - return V_028C70_ENDIAN_8IN32; - - /* 64-bit buffers. */ - case V_028C70_COLOR_16_16_16_16: - return V_028C70_ENDIAN_8IN16; - - case V_028C70_COLOR_32_32: - return V_028C70_ENDIAN_8IN32; - - /* 128-bit buffers. */ - case V_028C70_COLOR_32_32_32_32: - return V_028C70_ENDIAN_8IN32; - default: - return V_028C70_ENDIAN_NONE; /* Unsupported. */ - } - } else { - return V_028C70_ENDIAN_NONE; - } -} - bool radv_format_pack_clear_color(VkFormat format, uint32_t clear_vals[2], VkClearColorValue *value) { diff --git a/src/amd/vulkan/radv_formats.h b/src/amd/vulkan/radv_formats.h index 90e7d1685c7..5a18cdb6d56 100644 --- a/src/amd/vulkan/radv_formats.h +++ b/src/amd/vulkan/radv_formats.h @@ -159,8 +159,6 @@ bool radv_is_colorbuffer_format_supported(const struct radv_physical_device *pde bool radv_is_format_emulated(const struct radv_physical_device *pdev, VkFormat format); -uint32_t radv_colorformat_endian_swap(uint32_t colorformat); - bool radv_format_pack_clear_color(VkFormat format, uint32_t clear_vals[2], VkClearColorValue *value); bool radv_dcc_formats_compatible(enum amd_gfx_level gfx_level, VkFormat format1, VkFormat format2, diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 141773027cf..cbbb2c8ead9 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -1975,53 +1975,6 @@ static void si_emit_db_render_state(struct si_context *sctx, unsigned index) } } -/* - * format translation - */ - -static uint32_t si_colorformat_endian_swap(uint32_t colorformat) -{ - if (UTIL_ARCH_BIG_ENDIAN) { - switch (colorformat) { - /* 8-bit buffers. */ - case V_028C70_COLOR_8: - return V_028C70_ENDIAN_NONE; - - /* 16-bit buffers. */ - case V_028C70_COLOR_5_6_5: - case V_028C70_COLOR_1_5_5_5: - case V_028C70_COLOR_4_4_4_4: - case V_028C70_COLOR_16: - case V_028C70_COLOR_8_8: - return V_028C70_ENDIAN_8IN16; - - /* 32-bit buffers. */ - case V_028C70_COLOR_8_8_8_8: - case V_028C70_COLOR_2_10_10_10: - case V_028C70_COLOR_10_10_10_2: - case V_028C70_COLOR_8_24: - case V_028C70_COLOR_24_8: - case V_028C70_COLOR_16_16: - return V_028C70_ENDIAN_8IN32; - - /* 64-bit buffers. */ - case V_028C70_COLOR_16_16_16_16: - return V_028C70_ENDIAN_8IN16; - - case V_028C70_COLOR_32_32: - return V_028C70_ENDIAN_8IN32; - - /* 128-bit buffers. */ - case V_028C70_COLOR_32_32_32_32: - return V_028C70_ENDIAN_8IN32; - default: - return V_028C70_ENDIAN_NONE; /* Unsupported. */ - } - } else { - return V_028C70_ENDIAN_NONE; - } -} - /* * Texture translation */ @@ -2653,7 +2606,7 @@ static void si_initialize_color_surface(struct si_context *sctx, struct si_surfa } assert(format != V_028C70_COLOR_INVALID); swap = ac_translate_colorswap(sctx->gfx_level, surf->base.format, false); - endian = si_colorformat_endian_swap(format); + endian = ac_colorformat_endian_swap(format); /* blend clamp should be set for all NORM/SRGB types */ if (ntype == V_028C70_NUMBER_UNORM || ntype == V_028C70_NUMBER_SNORM ||