panfrost: Implement Z32F(_S8) support

Z32F uses a dediacted float path. Z32F_S8 uses separate stencil planes
in the hardware, lowered via u_transfer_helper.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
Alyssa Rosenzweig 2019-07-17 15:49:42 -07:00
parent 479185a1cd
commit 676b9339dd
2 changed files with 16 additions and 0 deletions

View file

@ -313,6 +313,20 @@ panfrost_mfbd_set_zsbuf(
fbx->flags |= 0x1;
} else if (surf->format == PIPE_FORMAT_Z32_UNORM) {
/* default flags (0 in bottom place) */
} else if (surf->format == PIPE_FORMAT_Z32_FLOAT) {
fbx->flags |= 0xA;
fb->mfbd_flags ^= 0x100;
fb->mfbd_flags |= 0x200;
} else if (surf->format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT) {
fbx->flags |= 0x1000A;
fb->mfbd_flags ^= 0x100;
fb->mfbd_flags |= 0x201;
struct panfrost_resource *stencil = rsrc->separate_stencil;
struct panfrost_slice stencil_slice = stencil->slices[level];
fbx->ds_linear.stencil = stencil->bo->gpu + stencil_slice.offset;
fbx->ds_linear.stencil_stride = stencil_slice.stride;
}
} else {

View file

@ -428,6 +428,8 @@ panfrost_is_format_supported( struct pipe_screen *screen,
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
case PIPE_FORMAT_Z24X8_UNORM:
case PIPE_FORMAT_Z32_UNORM:
case PIPE_FORMAT_Z32_FLOAT:
case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
return true;
default: