isl: don't set inconsistent fields for depth when using stencil only

Since Gfx12+ 3DSTATE_STENCIL_BUFFER gained its own
Width/Depth/Format/etc... fields. So don't set those fields but leave
the address/pitch to 0.

Issue found on simulation.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15637>
(cherry picked from commit 3ca1fdc8b5)
This commit is contained in:
Lionel Landwerlin 2022-02-20 20:46:17 +02:00 committed by Dylan Baker
parent 8881d4e36f
commit bf16396d8a
2 changed files with 9 additions and 1 deletions

View file

@ -2864,7 +2864,7 @@
"description": "isl: don't set inconsistent fields for depth when using stencil only",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null

View file

@ -114,12 +114,20 @@ isl_genX(emit_depth_stencil_hiz_s)(const struct isl_device *dev, void *batch,
if (db.SurfaceType == SURFTYPE_3D)
db.Depth = info->depth_surf->logical_level0_px.depth - 1;
} else if (info->stencil_surf) {
/* On Gfx12+ 3DSTATE_STENCIL_BUFFER has its own fields for all of
* this. No need to replicate it here.
*/
#if GFX_VER < 12
db.SurfaceType = isl_encode_ds_surftype[info->stencil_surf->dim];
db.SurfaceFormat = D32_FLOAT;
db.Width = info->stencil_surf->logical_level0_px.width - 1;
db.Height = info->stencil_surf->logical_level0_px.height - 1;
if (db.SurfaceType == SURFTYPE_3D)
db.Depth = info->stencil_surf->logical_level0_px.depth - 1;
#else
db.SurfaceType = SURFTYPE_NULL;
db.SurfaceFormat = D32_FLOAT;
#endif
} else {
db.SurfaceType = SURFTYPE_NULL;
db.SurfaceFormat = D32_FLOAT;