mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 01:08:03 +02:00
gallium/util: add util_format_snorm8_to_sint8 (from radeonsi)
This commit is contained in:
parent
3ee240890c
commit
b443465fb9
3 changed files with 45 additions and 30 deletions
|
|
@ -886,3 +886,43 @@ void util_format_unswizzle_4f(float *dst, const float *src,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum pipe_format
|
||||
util_format_snorm8_to_sint8(enum pipe_format format)
|
||||
{
|
||||
switch (format) {
|
||||
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_R8G8B8A8_SNORM:
|
||||
return PIPE_FORMAT_R8G8B8A8_SINT;
|
||||
|
||||
case PIPE_FORMAT_A8_SNORM:
|
||||
return PIPE_FORMAT_A8_SINT;
|
||||
case PIPE_FORMAT_L8_SNORM:
|
||||
return PIPE_FORMAT_L8_SINT;
|
||||
case PIPE_FORMAT_L8A8_SNORM:
|
||||
return PIPE_FORMAT_L8A8_SINT;
|
||||
case PIPE_FORMAT_I8_SNORM:
|
||||
return PIPE_FORMAT_I8_SINT;
|
||||
|
||||
case PIPE_FORMAT_R8G8B8X8_SNORM:
|
||||
return PIPE_FORMAT_R8G8B8X8_SINT;
|
||||
case PIPE_FORMAT_R8A8_SNORM:
|
||||
return PIPE_FORMAT_R8A8_SINT;
|
||||
case PIPE_FORMAT_A8L8_SNORM:
|
||||
return PIPE_FORMAT_A8L8_SINT;
|
||||
case PIPE_FORMAT_G8R8_SNORM:
|
||||
return PIPE_FORMAT_G8R8_SINT;
|
||||
case PIPE_FORMAT_A8B8G8R8_SNORM:
|
||||
return PIPE_FORMAT_A8B8G8R8_SINT;
|
||||
case PIPE_FORMAT_X8B8G8R8_SNORM:
|
||||
return PIPE_FORMAT_X8B8G8R8_SINT;
|
||||
|
||||
default:
|
||||
return format;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1358,6 +1358,9 @@ void pipe_swizzle_4f(float *dst, const float *src,
|
|||
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);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C" {
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1012,36 +1012,8 @@ void si_resource_copy_region(struct pipe_context *ctx,
|
|||
* Note that some chips avoid this issue by using SDMA.
|
||||
*/
|
||||
if (util_format_is_snorm8(dst_templ.format)) {
|
||||
switch (dst_templ.format) {
|
||||
case PIPE_FORMAT_R8_SNORM:
|
||||
dst_templ.format = src_templ.format = PIPE_FORMAT_R8_SINT;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8_SNORM:
|
||||
dst_templ.format = src_templ.format = PIPE_FORMAT_R8G8_SINT;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8B8X8_SNORM:
|
||||
dst_templ.format = src_templ.format = PIPE_FORMAT_R8G8B8X8_SINT;
|
||||
break;
|
||||
case PIPE_FORMAT_R8G8B8A8_SNORM:
|
||||
/* There are no SINT variants for ABGR and XBGR, so we have to use RGBA. */
|
||||
case PIPE_FORMAT_A8B8G8R8_SNORM:
|
||||
case PIPE_FORMAT_X8B8G8R8_SNORM:
|
||||
dst_templ.format = src_templ.format = PIPE_FORMAT_R8G8B8A8_SINT;
|
||||
break;
|
||||
case PIPE_FORMAT_A8_SNORM:
|
||||
dst_templ.format = src_templ.format = PIPE_FORMAT_A8_SINT;
|
||||
break;
|
||||
case PIPE_FORMAT_L8_SNORM:
|
||||
dst_templ.format = src_templ.format = PIPE_FORMAT_L8_SINT;
|
||||
break;
|
||||
case PIPE_FORMAT_L8A8_SNORM:
|
||||
dst_templ.format = src_templ.format = PIPE_FORMAT_L8A8_SINT;
|
||||
break;
|
||||
case PIPE_FORMAT_I8_SNORM:
|
||||
dst_templ.format = src_templ.format = PIPE_FORMAT_I8_SINT;
|
||||
break;
|
||||
default:; /* fall through */
|
||||
}
|
||||
dst_templ.format = src_templ.format =
|
||||
util_format_snorm8_to_sint8(dst_templ.format);
|
||||
}
|
||||
|
||||
vi_disable_dcc_if_incompatible_format(sctx, dst, dst_level,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue