mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 11:00:11 +01:00
util: change util_format_snorm8_to_sint8 -> snorm_to_sint for radeonsi
Convert all SNORM formats to SINT. This fixes SNORM blits for radeonsi. Reviewed-by: Emma Anholt <emma@anholt.net> Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16132>
This commit is contained in:
parent
09d6ebac7e
commit
2d4067a6fb
4 changed files with 62 additions and 20 deletions
|
|
@ -1028,11 +1028,11 @@ void si_resource_copy_region(struct pipe_context *ctx, struct pipe_resource *dst
|
|||
}
|
||||
}
|
||||
|
||||
/* SNORM8 blitting has precision issues on some chips. Use the SINT
|
||||
/* SNORM blitting has precision issues on some chips. Use the SINT
|
||||
* equivalent instead, which doesn't force DCC decompression.
|
||||
*/
|
||||
if (util_format_is_snorm8(dst_templ.format)) {
|
||||
dst_templ.format = src_templ.format = util_format_snorm8_to_sint8(dst_templ.format);
|
||||
if (util_format_is_snorm(dst_templ.format)) {
|
||||
dst_templ.format = src_templ.format = util_format_snorm_to_sint(dst_templ.format);
|
||||
}
|
||||
|
||||
vi_disable_dcc_if_incompatible_format(sctx, dst, dst_level, dst_templ.format);
|
||||
|
|
|
|||
|
|
@ -581,11 +581,11 @@ void si_compute_copy_image(struct si_context *sctx, struct pipe_resource *dst, u
|
|||
image[1].u.tex.last_layer = dst->target == PIPE_TEXTURE_3D ? u_minify(dst->depth0, dst_level) - 1
|
||||
: (unsigned)(dst->array_size - 1);
|
||||
|
||||
/* SNORM8 blitting has precision issues on some chips. Use the SINT
|
||||
/* SNORM blitting has precision issues on some chips. Use the SINT
|
||||
* equivalent instead, which doesn't force DCC decompression.
|
||||
*/
|
||||
if (util_format_is_snorm8(dst->format)) {
|
||||
image[0].format = image[1].format = util_format_snorm8_to_sint8(dst->format);
|
||||
if (util_format_is_snorm(dst->format)) {
|
||||
image[0].format = image[1].format = util_format_snorm_to_sint(dst->format);
|
||||
}
|
||||
|
||||
if (is_dcc_decompress)
|
||||
|
|
|
|||
|
|
@ -980,17 +980,47 @@ void util_format_unswizzle_4f(float *dst, const float *src,
|
|||
}
|
||||
|
||||
enum pipe_format
|
||||
util_format_snorm8_to_sint8(enum pipe_format format)
|
||||
util_format_snorm_to_sint(enum pipe_format format)
|
||||
{
|
||||
switch (format) {
|
||||
case PIPE_FORMAT_R32_SNORM:
|
||||
return PIPE_FORMAT_R32_SINT;
|
||||
case PIPE_FORMAT_R32G32_SNORM:
|
||||
return PIPE_FORMAT_R32G32_SINT;
|
||||
case PIPE_FORMAT_R32G32B32_SNORM:
|
||||
return PIPE_FORMAT_R32G32B32_SINT;
|
||||
case PIPE_FORMAT_R32G32B32A32_SNORM:
|
||||
return PIPE_FORMAT_R32G32B32A32_SINT;
|
||||
|
||||
case PIPE_FORMAT_R16_SNORM:
|
||||
return PIPE_FORMAT_R16_SINT;
|
||||
case PIPE_FORMAT_R16G16_SNORM:
|
||||
return PIPE_FORMAT_R16G16_SINT;
|
||||
case PIPE_FORMAT_R16G16B16_SNORM:
|
||||
return PIPE_FORMAT_R16G16B16_SINT;
|
||||
case PIPE_FORMAT_R16G16B16A16_SNORM:
|
||||
return PIPE_FORMAT_R16G16B16A16_SINT;
|
||||
|
||||
case PIPE_FORMAT_R8_SNORM:
|
||||
return PIPE_FORMAT_R8_SINT;
|
||||
case PIPE_FORMAT_R8G8_SNORM:
|
||||
return PIPE_FORMAT_R8G8_SINT;
|
||||
case PIPE_FORMAT_R8G8B8_SNORM:
|
||||
return PIPE_FORMAT_R8G8B8_SINT;
|
||||
case PIPE_FORMAT_B8G8R8_SNORM:
|
||||
return PIPE_FORMAT_B8G8R8_SINT;
|
||||
case PIPE_FORMAT_R8G8B8A8_SNORM:
|
||||
return PIPE_FORMAT_R8G8B8A8_SINT;
|
||||
case PIPE_FORMAT_B8G8R8A8_SNORM:
|
||||
return PIPE_FORMAT_B8G8R8A8_SINT;
|
||||
|
||||
case PIPE_FORMAT_R10G10B10A2_SNORM:
|
||||
return PIPE_FORMAT_R10G10B10A2_SINT;
|
||||
case PIPE_FORMAT_B10G10R10A2_SNORM:
|
||||
return PIPE_FORMAT_B10G10R10A2_SINT;
|
||||
|
||||
case PIPE_FORMAT_R10G10B10X2_SNORM:
|
||||
return PIPE_FORMAT_R10G10B10X2_SINT;
|
||||
|
||||
case PIPE_FORMAT_A8_SNORM:
|
||||
return PIPE_FORMAT_A8_SINT;
|
||||
|
|
@ -1001,30 +1031,43 @@ util_format_snorm8_to_sint8(enum pipe_format format)
|
|||
case PIPE_FORMAT_I8_SNORM:
|
||||
return PIPE_FORMAT_I8_SINT;
|
||||
|
||||
case PIPE_FORMAT_A16_SNORM:
|
||||
return PIPE_FORMAT_A16_SINT;
|
||||
case PIPE_FORMAT_L16_SNORM:
|
||||
return PIPE_FORMAT_L16_SINT;
|
||||
case PIPE_FORMAT_L16A16_SNORM:
|
||||
return PIPE_FORMAT_L16A16_SINT;
|
||||
case PIPE_FORMAT_I16_SNORM:
|
||||
return PIPE_FORMAT_I16_SINT;
|
||||
|
||||
case PIPE_FORMAT_R8G8B8X8_SNORM:
|
||||
return PIPE_FORMAT_R8G8B8X8_SINT;
|
||||
case PIPE_FORMAT_B8G8R8X8_SNORM:
|
||||
return PIPE_FORMAT_B8G8R8X8_SINT;
|
||||
case PIPE_FORMAT_R16G16B16X16_SNORM:
|
||||
return PIPE_FORMAT_R16G16B16X16_SINT;
|
||||
|
||||
case PIPE_FORMAT_R8A8_SNORM:
|
||||
return PIPE_FORMAT_R8A8_SINT;
|
||||
case PIPE_FORMAT_R16A16_SNORM:
|
||||
return PIPE_FORMAT_R16A16_SINT;
|
||||
|
||||
case PIPE_FORMAT_G8R8_SNORM:
|
||||
return PIPE_FORMAT_G8R8_SINT;
|
||||
|
||||
case PIPE_FORMAT_A8R8G8B8_SNORM:
|
||||
return PIPE_FORMAT_A8R8G8B8_SINT;
|
||||
case PIPE_FORMAT_X8R8G8B8_SNORM:
|
||||
return PIPE_FORMAT_X8R8G8B8_SINT;
|
||||
case PIPE_FORMAT_G16R16_SNORM:
|
||||
return PIPE_FORMAT_G16R16_SINT;
|
||||
|
||||
case PIPE_FORMAT_A8B8G8R8_SNORM:
|
||||
return PIPE_FORMAT_A8B8G8R8_SINT;
|
||||
case PIPE_FORMAT_X8B8G8R8_SNORM:
|
||||
return PIPE_FORMAT_X8B8G8R8_SINT;
|
||||
|
||||
case PIPE_FORMAT_R10G10B10A2_SNORM:
|
||||
return PIPE_FORMAT_R10G10B10A2_SINT;
|
||||
case PIPE_FORMAT_B10G10R10A2_SNORM:
|
||||
return PIPE_FORMAT_B10G10R10A2_SINT;
|
||||
case PIPE_FORMAT_B8G8R8X8_SNORM:
|
||||
return PIPE_FORMAT_B8G8R8X8_SINT;
|
||||
case PIPE_FORMAT_A8R8G8B8_SNORM:
|
||||
return PIPE_FORMAT_A8R8G8B8_SINT;
|
||||
case PIPE_FORMAT_X8R8G8B8_SNORM:
|
||||
return PIPE_FORMAT_X8R8G8B8_SINT;
|
||||
case PIPE_FORMAT_B10G10R10X2_SNORM:
|
||||
return PIPE_FORMAT_B10G10R10X2_SINT;
|
||||
|
||||
default:
|
||||
return format;
|
||||
|
|
|
|||
|
|
@ -1672,8 +1672,7 @@ void util_format_unswizzle_4f(float *dst, const float *src,
|
|||
const unsigned char swz[4]);
|
||||
|
||||
enum pipe_format
|
||||
util_format_snorm8_to_sint8(enum pipe_format format) ATTRIBUTE_CONST;
|
||||
|
||||
util_format_snorm_to_sint(enum pipe_format format) ATTRIBUTE_CONST;
|
||||
|
||||
extern void
|
||||
util_copy_rect(ubyte * dst, enum pipe_format format,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue