mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
freedreno/a6xx: Allow z24s8 format casts
Allow UBWC format casts between z24s8/x24s8/z24x8. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8816 Signed-off-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22427>
This commit is contained in:
parent
fc5dd4035a
commit
87978c3933
1 changed files with 21 additions and 0 deletions
|
|
@ -118,6 +118,20 @@ is_norm(enum pipe_format format)
|
||||||
return desc->is_snorm || desc->is_unorm;
|
return desc->is_snorm || desc->is_unorm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
is_z24s8(enum pipe_format format)
|
||||||
|
{
|
||||||
|
switch (format) {
|
||||||
|
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
|
||||||
|
case PIPE_FORMAT_Z24X8_UNORM:
|
||||||
|
case PIPE_FORMAT_X24S8_UINT:
|
||||||
|
case PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
valid_format_cast(struct fd_resource *rsc, enum pipe_format format)
|
valid_format_cast(struct fd_resource *rsc, enum pipe_format format)
|
||||||
{
|
{
|
||||||
|
|
@ -125,6 +139,13 @@ valid_format_cast(struct fd_resource *rsc, enum pipe_format format)
|
||||||
if (format == PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8)
|
if (format == PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
/* If we support z24s8 ubwc then allow casts between the various
|
||||||
|
* permutations of z24s8:
|
||||||
|
*/
|
||||||
|
if (fd_screen(rsc->b.b.screen)->info->a6xx.has_z24uint_s8uint &&
|
||||||
|
(is_z24s8(format) == is_z24s8(rsc->b.b.format)))
|
||||||
|
return true;
|
||||||
|
|
||||||
/* For some color values (just "solid white") compression metadata maps to
|
/* For some color values (just "solid white") compression metadata maps to
|
||||||
* different pixel values for uint/sint vs unorm/snorm, so we can't reliably
|
* different pixel values for uint/sint vs unorm/snorm, so we can't reliably
|
||||||
* "cast" u/snorm to u/sint and visa versa:
|
* "cast" u/snorm to u/sint and visa versa:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue