panfrost: Add the BO containing fragment program descriptor to the batch

On pre-Valhall HW, the fragment shader metadata was part of the RSD
(renderer state descriptor), which was emitted at draw time, but
Valhall introduces a shader program descriptor containing only the
shader information, and this one is emitted at shader preparation
time.

If we don't add the FS state BO to batch, we might end up with a batch
being executed after the shader object has been destroyed, leading to
page faults when the GPU tries to access the shader program descriptor.

We make the panfrost_batch_add_bo() unconditional since it gracefully
handles the NULL case (which will happen on v7-).

Fixes: 087b63cb07 ("panfrost: Allow uploading fragment SPDs")
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Antonino Maniscalco <antonino.maniscalco@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28926>
(cherry picked from commit 2cc317763c)
This commit is contained in:
Boris Brezillon 2024-04-05 22:03:38 +02:00 committed by Eric Engestrom
parent c849ee432d
commit 2c3d8d76aa
2 changed files with 2 additions and 1 deletions

View file

@ -74,7 +74,7 @@
"description": "panfrost: Add the BO containing fragment program descriptor to the batch",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "087b63cb07717e83ea606648f2551fc9586b9165",
"notes": null

View file

@ -622,6 +622,7 @@ panfrost_emit_frag_shader_meta(struct panfrost_batch *batch)
struct panfrost_compiled_shader *ss = ctx->prog[PIPE_SHADER_FRAGMENT];
panfrost_batch_add_bo(batch, ss->bin.bo, PIPE_SHADER_FRAGMENT);
panfrost_batch_add_bo(batch, ss->state.bo, PIPE_SHADER_FRAGMENT);
struct panfrost_ptr xfer;