mirror of https://gitlab.freedesktop.org/mesa/mesa
ac,radv,radeonsi: add a function to translate tex numformat
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29265>
This commit is contained in:
parent
6030c876d0
commit
255e76b419
|
@ -115,3 +115,80 @@ ac_translate_buffer_dataformat(const struct util_format_description *desc,
|
|||
|
||||
return V_008F0C_BUF_DATA_FORMAT_INVALID;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
ac_translate_tex_numformat(const struct util_format_description *desc,
|
||||
int first_non_void)
|
||||
{
|
||||
uint32_t num_format;
|
||||
|
||||
switch (desc->format) {
|
||||
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
break;
|
||||
default:
|
||||
if (first_non_void < 0) {
|
||||
if (util_format_is_compressed(desc->format)) {
|
||||
switch (desc->format) {
|
||||
case PIPE_FORMAT_DXT1_SRGB:
|
||||
case PIPE_FORMAT_DXT1_SRGBA:
|
||||
case PIPE_FORMAT_DXT3_SRGBA:
|
||||
case PIPE_FORMAT_DXT5_SRGBA:
|
||||
case PIPE_FORMAT_BPTC_SRGBA:
|
||||
case PIPE_FORMAT_ETC2_SRGB8:
|
||||
case PIPE_FORMAT_ETC2_SRGB8A1:
|
||||
case PIPE_FORMAT_ETC2_SRGBA8:
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SRGB;
|
||||
break;
|
||||
case PIPE_FORMAT_RGTC1_SNORM:
|
||||
case PIPE_FORMAT_LATC1_SNORM:
|
||||
case PIPE_FORMAT_RGTC2_SNORM:
|
||||
case PIPE_FORMAT_LATC2_SNORM:
|
||||
case PIPE_FORMAT_ETC2_R11_SNORM:
|
||||
case PIPE_FORMAT_ETC2_RG11_SNORM:
|
||||
/* implies float, so use SNORM/UNORM to determine
|
||||
whether data is signed or not */
|
||||
case PIPE_FORMAT_BPTC_RGB_FLOAT:
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SNORM;
|
||||
break;
|
||||
default:
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
break;
|
||||
}
|
||||
} else if (desc->layout == UTIL_FORMAT_LAYOUT_SUBSAMPLED) {
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
} else {
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_FLOAT;
|
||||
}
|
||||
} else if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) {
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SRGB;
|
||||
} else {
|
||||
switch (desc->channel[first_non_void].type) {
|
||||
case UTIL_FORMAT_TYPE_FLOAT:
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_FLOAT;
|
||||
break;
|
||||
case UTIL_FORMAT_TYPE_SIGNED:
|
||||
if (desc->channel[first_non_void].normalized)
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SNORM;
|
||||
else if (desc->channel[first_non_void].pure_integer)
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SINT;
|
||||
else
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SSCALED;
|
||||
break;
|
||||
case UTIL_FORMAT_TYPE_UNSIGNED:
|
||||
if (desc->channel[first_non_void].normalized)
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
else if (desc->channel[first_non_void].pure_integer)
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UINT;
|
||||
else
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_USCALED;
|
||||
break;
|
||||
default:
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return num_format;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,10 @@ uint32_t
|
|||
ac_translate_buffer_dataformat(const struct util_format_description *desc,
|
||||
int first_non_void);
|
||||
|
||||
uint32_t
|
||||
ac_translate_tex_numformat(const struct util_format_description *desc,
|
||||
int first_non_void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -297,61 +297,7 @@ radv_translate_tex_numformat(const struct util_format_description *desc, int fir
|
|||
{
|
||||
assert(util_format_get_num_planes(desc->format) == 1);
|
||||
|
||||
switch (desc->format) {
|
||||
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
|
||||
return V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
default:
|
||||
if (first_non_void < 0) {
|
||||
if (util_format_is_compressed(desc->format)) {
|
||||
switch (desc->format) {
|
||||
case PIPE_FORMAT_DXT1_SRGB:
|
||||
case PIPE_FORMAT_DXT1_SRGBA:
|
||||
case PIPE_FORMAT_DXT3_SRGBA:
|
||||
case PIPE_FORMAT_DXT5_SRGBA:
|
||||
case PIPE_FORMAT_BPTC_SRGBA:
|
||||
case PIPE_FORMAT_ETC2_SRGB8:
|
||||
case PIPE_FORMAT_ETC2_SRGB8A1:
|
||||
case PIPE_FORMAT_ETC2_SRGBA8:
|
||||
return V_008F14_IMG_NUM_FORMAT_SRGB;
|
||||
case PIPE_FORMAT_RGTC1_SNORM:
|
||||
case PIPE_FORMAT_RGTC2_SNORM:
|
||||
case PIPE_FORMAT_BPTC_RGB_FLOAT:
|
||||
case PIPE_FORMAT_ETC2_R11_SNORM:
|
||||
case PIPE_FORMAT_ETC2_RG11_SNORM:
|
||||
return V_008F14_IMG_NUM_FORMAT_SNORM;
|
||||
default:
|
||||
return V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
}
|
||||
} else if (desc->layout == UTIL_FORMAT_LAYOUT_SUBSAMPLED) {
|
||||
return V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
} else {
|
||||
return V_008F14_IMG_NUM_FORMAT_FLOAT;
|
||||
}
|
||||
} else if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) {
|
||||
return V_008F14_IMG_NUM_FORMAT_SRGB;
|
||||
} else {
|
||||
switch (desc->channel[first_non_void].type) {
|
||||
case UTIL_FORMAT_TYPE_FLOAT:
|
||||
return V_008F14_IMG_NUM_FORMAT_FLOAT;
|
||||
case UTIL_FORMAT_TYPE_SIGNED:
|
||||
if (desc->channel[first_non_void].normalized)
|
||||
return V_008F14_IMG_NUM_FORMAT_SNORM;
|
||||
else if (desc->channel[first_non_void].pure_integer)
|
||||
return V_008F14_IMG_NUM_FORMAT_SINT;
|
||||
else
|
||||
return V_008F14_IMG_NUM_FORMAT_SSCALED;
|
||||
case UTIL_FORMAT_TYPE_UNSIGNED:
|
||||
if (desc->channel[first_non_void].normalized)
|
||||
return V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
else if (desc->channel[first_non_void].pure_integer)
|
||||
return V_008F14_IMG_NUM_FORMAT_UINT;
|
||||
else
|
||||
return V_008F14_IMG_NUM_FORMAT_USCALED;
|
||||
default:
|
||||
return V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ac_translate_tex_numformat(desc, first_non_void);
|
||||
}
|
||||
|
||||
static bool
|
||||
|
|
|
@ -4967,71 +4967,7 @@ static void si_make_texture_descriptor(struct si_screen *screen, struct si_textu
|
|||
|
||||
first_non_void = util_format_get_first_non_void_channel(pipe_format);
|
||||
|
||||
switch (pipe_format) {
|
||||
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
break;
|
||||
default:
|
||||
if (first_non_void < 0) {
|
||||
if (util_format_is_compressed(pipe_format)) {
|
||||
switch (pipe_format) {
|
||||
case PIPE_FORMAT_DXT1_SRGB:
|
||||
case PIPE_FORMAT_DXT1_SRGBA:
|
||||
case PIPE_FORMAT_DXT3_SRGBA:
|
||||
case PIPE_FORMAT_DXT5_SRGBA:
|
||||
case PIPE_FORMAT_BPTC_SRGBA:
|
||||
case PIPE_FORMAT_ETC2_SRGB8:
|
||||
case PIPE_FORMAT_ETC2_SRGB8A1:
|
||||
case PIPE_FORMAT_ETC2_SRGBA8:
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SRGB;
|
||||
break;
|
||||
case PIPE_FORMAT_RGTC1_SNORM:
|
||||
case PIPE_FORMAT_LATC1_SNORM:
|
||||
case PIPE_FORMAT_RGTC2_SNORM:
|
||||
case PIPE_FORMAT_LATC2_SNORM:
|
||||
case PIPE_FORMAT_ETC2_R11_SNORM:
|
||||
case PIPE_FORMAT_ETC2_RG11_SNORM:
|
||||
/* implies float, so use SNORM/UNORM to determine
|
||||
whether data is signed or not */
|
||||
case PIPE_FORMAT_BPTC_RGB_FLOAT:
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SNORM;
|
||||
break;
|
||||
default:
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
break;
|
||||
}
|
||||
} else if (desc->layout == UTIL_FORMAT_LAYOUT_SUBSAMPLED) {
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
} else {
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_FLOAT;
|
||||
}
|
||||
} else if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) {
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SRGB;
|
||||
} else {
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
|
||||
switch (desc->channel[first_non_void].type) {
|
||||
case UTIL_FORMAT_TYPE_FLOAT:
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_FLOAT;
|
||||
break;
|
||||
case UTIL_FORMAT_TYPE_SIGNED:
|
||||
if (desc->channel[first_non_void].normalized)
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SNORM;
|
||||
else if (desc->channel[first_non_void].pure_integer)
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SINT;
|
||||
else
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_SSCALED;
|
||||
break;
|
||||
case UTIL_FORMAT_TYPE_UNSIGNED:
|
||||
if (desc->channel[first_non_void].normalized)
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UNORM;
|
||||
else if (desc->channel[first_non_void].pure_integer)
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_UINT;
|
||||
else
|
||||
num_format = V_008F14_IMG_NUM_FORMAT_USCALED;
|
||||
}
|
||||
}
|
||||
}
|
||||
num_format = ac_translate_tex_numformat(desc, first_non_void);
|
||||
|
||||
data_format = si_translate_texformat(&screen->b, pipe_format, desc, first_non_void);
|
||||
if (data_format == ~0) {
|
||||
|
|
Loading…
Reference in New Issue