summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTapani Pälli <tapani.palli@intel.com>2020-04-30 13:03:48 +0300
committerDylan Baker <dylan.c.baker@intel.com>2020-05-04 10:21:07 -0700
commit52f1498321d81d278c472e4719f0437866d8cbb8 (patch)
tree9a611c78778f32c6d676735c5a00fd698276c6f2
parent52ad2d9bb279ecf38031bb8b5ec578379da21245 (diff)
st/mesa: destroy only own program variants when program is released
Earlier commit tried to achieve this but actually did more. This makes sure the variants for other contexts continue to live. Fixes: de3d7dbed52 ("mesa/st: release variants for active programs before unref") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/2865 Cc: mesa-stable@lists.freedesktop.org Signed-off-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4831> (cherry picked from commit 46b3cb011fd1c9198aeec33d453206846b579817)
-rw-r--r--.pick_status.json2
-rw-r--r--src/mesa/state_tracker/st_program.c4
2 files changed, 4 insertions, 2 deletions
diff --git a/.pick_status.json b/.pick_status.json
index f602586772a..9b7f9f57a2e 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -382,7 +382,7 @@
"description": "st/mesa: destroy only own program variants when program is released",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": "de3d7dbed521c40344c9f8b2b505b6e2b13a7636"
},
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index 6585945f343..7a485acf8d0 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -67,6 +67,8 @@
#include "cso_cache/cso_context.h"
+static void
+destroy_program_variants(struct st_context *st, struct gl_program *target);
static void
set_affected_state_flags(uint64_t *states,
@@ -342,7 +344,7 @@ st_release_program(struct st_context *st, struct st_program **p)
if (!*p)
return;
- st_release_variants(st, *p);
+ destroy_program_variants(st, &((*p)->Base));
st_reference_prog(st, p, NULL);
}