freedreno: Disable UBWC on Z24S8 if not TEXTURE_2D.

Fixes two of our three remaining GLES CTS failures, and avoids more
regressions once we enable UBWC mipmaps.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3059>
This commit is contained in:
Eric Anholt
2019-12-12 14:30:29 -08:00
committed by Marge Bot
parent ddb0b35b76
commit ecd62ff766

View File

@@ -35,7 +35,7 @@
* it can be tiled doesn't mean it can be compressed.
*/
static bool
ok_ubwc_format(enum pipe_format pfmt)
ok_ubwc_format(struct fd_resource *rsc, enum pipe_format pfmt)
{
/* NOTE: both x24s8 and z24s8 map to RB6_X8Z24_UNORM, but UBWC
* does not seem to work properly when sampling x24s8.. possibly
@@ -48,6 +48,14 @@ ok_ubwc_format(enum pipe_format pfmt)
if (pfmt == PIPE_FORMAT_X24S8_UINT)
return false;
/* We don't fully understand what's going wrong with this combination, but
* we haven't been able to make it work. It's enough of a corner-case
* that we can just disable UBWC for these resources.
*/
if (rsc->base.target != PIPE_TEXTURE_2D &&
pfmt == PIPE_FORMAT_Z24_UNORM_S8_UINT)
return false;
switch (fd6_pipe2color(pfmt)) {
case RB6_R10G10B10A2_UINT:
case RB6_R10G10B10A2_UNORM:
@@ -92,7 +100,7 @@ fd6_fill_ubwc_buffer_sizes(struct fd_resource *rsc)
uint32_t width = prsc->width0;
uint32_t height = prsc->height0;
if (!ok_ubwc_format(prsc->format))
if (!ok_ubwc_format(rsc, prsc->format))
return 0;
/* limit things to simple single level 2d for now: */
@@ -154,7 +162,7 @@ fd6_validate_format(struct fd_context *ctx, struct fd_resource *rsc,
if (!rsc->layout.ubwc_layer_size)
return;
if (ok_ubwc_format(format))
if (ok_ubwc_format(rsc, format))
return;
fd_resource_uncompress(ctx, rsc);