mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-24 22:20:38 +02:00
ac,radv,radeonsi: add a helper to translate buffer numformat
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29236>
This commit is contained in:
parent
3409015103
commit
5d9bdb6410
5 changed files with 74 additions and 53 deletions
43
src/amd/common/ac_formats.c
Normal file
43
src/amd/common/ac_formats.c
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Copyright 2015 Advanced Micro Devices, Inc.
|
||||
* Copyright 2024 Valve Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "ac_formats.h"
|
||||
|
||||
#include "sid.h"
|
||||
|
||||
uint32_t
|
||||
ac_translate_buffer_numformat(const struct util_format_description *desc,
|
||||
int first_non_void)
|
||||
{
|
||||
if (desc->format == PIPE_FORMAT_R11G11B10_FLOAT)
|
||||
return V_008F0C_BUF_NUM_FORMAT_FLOAT;
|
||||
|
||||
assert(first_non_void >= 0);
|
||||
|
||||
switch (desc->channel[first_non_void].type) {
|
||||
case UTIL_FORMAT_TYPE_SIGNED:
|
||||
case UTIL_FORMAT_TYPE_FIXED:
|
||||
if (desc->channel[first_non_void].size >= 32 || desc->channel[first_non_void].pure_integer)
|
||||
return V_008F0C_BUF_NUM_FORMAT_SINT;
|
||||
else if (desc->channel[first_non_void].normalized)
|
||||
return V_008F0C_BUF_NUM_FORMAT_SNORM;
|
||||
else
|
||||
return V_008F0C_BUF_NUM_FORMAT_SSCALED;
|
||||
break;
|
||||
case UTIL_FORMAT_TYPE_UNSIGNED:
|
||||
if (desc->channel[first_non_void].size >= 32 || desc->channel[first_non_void].pure_integer)
|
||||
return V_008F0C_BUF_NUM_FORMAT_UINT;
|
||||
else if (desc->channel[first_non_void].normalized)
|
||||
return V_008F0C_BUF_NUM_FORMAT_UNORM;
|
||||
else
|
||||
return V_008F0C_BUF_NUM_FORMAT_USCALED;
|
||||
break;
|
||||
case UTIL_FORMAT_TYPE_FLOAT:
|
||||
default:
|
||||
return V_008F0C_BUF_NUM_FORMAT_FLOAT;
|
||||
}
|
||||
}
|
||||
25
src/amd/common/ac_formats.h
Normal file
25
src/amd/common/ac_formats.h
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* Copyright 2015 Advanced Micro Devices, Inc.
|
||||
* Copyright 2024 Valve Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#ifndef AC_FORMATS_H
|
||||
#define AC_FORMATS_H
|
||||
|
||||
#include "util/format/u_format.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
uint32_t
|
||||
ac_translate_buffer_numformat(const struct util_format_description *desc,
|
||||
int first_non_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
@ -82,6 +82,8 @@ amd_common_files = files(
|
|||
'ac_surface.h',
|
||||
'ac_debug.c',
|
||||
'ac_debug.h',
|
||||
'ac_formats.c',
|
||||
'ac_formats.h',
|
||||
'ac_shadowed_regs.c',
|
||||
'ac_shadowed_regs.h',
|
||||
'ac_spm.c',
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include "util/format_srgb.h"
|
||||
#include "util/half_float.h"
|
||||
#include "ac_drm_fourcc.h"
|
||||
#include "ac_formats.h"
|
||||
|
||||
uint32_t
|
||||
radv_translate_buffer_dataformat(const struct util_format_description *desc, int first_non_void)
|
||||
|
|
@ -105,32 +106,7 @@ radv_translate_buffer_numformat(const struct util_format_description *desc, int
|
|||
{
|
||||
assert(util_format_get_num_planes(desc->format) == 1);
|
||||
|
||||
if (desc->format == PIPE_FORMAT_R11G11B10_FLOAT)
|
||||
return V_008F0C_BUF_NUM_FORMAT_FLOAT;
|
||||
|
||||
assert(first_non_void >= 0);
|
||||
|
||||
switch (desc->channel[first_non_void].type) {
|
||||
case UTIL_FORMAT_TYPE_SIGNED:
|
||||
if (desc->channel[first_non_void].normalized)
|
||||
return V_008F0C_BUF_NUM_FORMAT_SNORM;
|
||||
else if (desc->channel[first_non_void].pure_integer)
|
||||
return V_008F0C_BUF_NUM_FORMAT_SINT;
|
||||
else
|
||||
return V_008F0C_BUF_NUM_FORMAT_SSCALED;
|
||||
break;
|
||||
case UTIL_FORMAT_TYPE_UNSIGNED:
|
||||
if (desc->channel[first_non_void].normalized)
|
||||
return V_008F0C_BUF_NUM_FORMAT_UNORM;
|
||||
else if (desc->channel[first_non_void].pure_integer)
|
||||
return V_008F0C_BUF_NUM_FORMAT_UINT;
|
||||
else
|
||||
return V_008F0C_BUF_NUM_FORMAT_USCALED;
|
||||
break;
|
||||
case UTIL_FORMAT_TYPE_FLOAT:
|
||||
default:
|
||||
return V_008F0C_BUF_NUM_FORMAT_FLOAT;
|
||||
}
|
||||
return ac_translate_buffer_numformat(desc, first_non_void);
|
||||
}
|
||||
|
||||
static bool
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include "util/u_upload_mgr.h"
|
||||
#include "util/u_blend.h"
|
||||
|
||||
#include "ac_formats.h"
|
||||
#include "gfx10_format_table.h"
|
||||
|
||||
static unsigned si_map_swizzle(unsigned swizzle)
|
||||
|
|
@ -2537,33 +2538,7 @@ static uint32_t si_translate_buffer_numformat(struct pipe_screen *screen,
|
|||
{
|
||||
assert(((struct si_screen *)screen)->info.gfx_level <= GFX9);
|
||||
|
||||
if (desc->format == PIPE_FORMAT_R11G11B10_FLOAT)
|
||||
return V_008F0C_BUF_NUM_FORMAT_FLOAT;
|
||||
|
||||
assert(first_non_void >= 0);
|
||||
|
||||
switch (desc->channel[first_non_void].type) {
|
||||
case UTIL_FORMAT_TYPE_SIGNED:
|
||||
case UTIL_FORMAT_TYPE_FIXED:
|
||||
if (desc->channel[first_non_void].size >= 32 || desc->channel[first_non_void].pure_integer)
|
||||
return V_008F0C_BUF_NUM_FORMAT_SINT;
|
||||
else if (desc->channel[first_non_void].normalized)
|
||||
return V_008F0C_BUF_NUM_FORMAT_SNORM;
|
||||
else
|
||||
return V_008F0C_BUF_NUM_FORMAT_SSCALED;
|
||||
break;
|
||||
case UTIL_FORMAT_TYPE_UNSIGNED:
|
||||
if (desc->channel[first_non_void].size >= 32 || desc->channel[first_non_void].pure_integer)
|
||||
return V_008F0C_BUF_NUM_FORMAT_UINT;
|
||||
else if (desc->channel[first_non_void].normalized)
|
||||
return V_008F0C_BUF_NUM_FORMAT_UNORM;
|
||||
else
|
||||
return V_008F0C_BUF_NUM_FORMAT_USCALED;
|
||||
break;
|
||||
case UTIL_FORMAT_TYPE_FLOAT:
|
||||
default:
|
||||
return V_008F0C_BUF_NUM_FORMAT_FLOAT;
|
||||
}
|
||||
return ac_translate_buffer_numformat(desc, first_non_void);
|
||||
}
|
||||
|
||||
static unsigned si_is_vertex_format_supported(struct pipe_screen *screen, enum pipe_format format,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue