summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIcecream95 <ixn@disroot.org>2022-05-05 12:57:40 +1200
committerDylan Baker <dylan.c.baker@intel.com>2022-06-01 14:10:28 -0700
commit8e85e7d7e9c4a2a3b1b791641ab0e760633d91be (patch)
tree97e9551c2467d14b4b13cd3dce44597fc4d2550e
parentfcdd2a536bd6fa5c50c013c9b207285cb28feae8 (diff)
panfrost: Copy blend constant into variant even when reusing it
Otherwise future lookups will match searches for the old constant. Fixes: bbff09b9521 ("panfrost: Move the blend shader cache at the device level") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6355 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16343> (cherry picked from commit 80404c8b640bdc24274b67561842ebf684e741f5)
-rw-r--r--.pick_status.json2
-rw-r--r--src/panfrost/lib/pan_blend.c3
2 files changed, 3 insertions, 2 deletions
diff --git a/.pick_status.json b/.pick_status.json
index 9f848f9a2d7..7fdde6b1651 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -670,7 +670,7 @@
"description": "panfrost: Copy blend constant into variant even when reusing it",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"main_sha": null,
"because_sha": "bbff09b9521f17b40441885d06e089abf6c2e0b1"
},
diff --git a/src/panfrost/lib/pan_blend.c b/src/panfrost/lib/pan_blend.c
index d9593004ca8..82f1a6fa0c2 100644
--- a/src/panfrost/lib/pan_blend.c
+++ b/src/panfrost/lib/pan_blend.c
@@ -802,7 +802,6 @@ GENX(pan_blend_get_shader_locked)(const struct panfrost_device *dev,
if (shader->nvariants < PAN_BLEND_SHADER_MAX_VARIANTS) {
variant = rzalloc(shader, struct pan_blend_shader_variant);
- memcpy(variant->constants, state->constants, sizeof(variant->constants));
util_dynarray_init(&variant->binary, variant);
list_add(&variant->node, &shader->variants);
shader->nvariants++;
@@ -813,6 +812,8 @@ GENX(pan_blend_get_shader_locked)(const struct panfrost_device *dev,
util_dynarray_clear(&variant->binary);
}
+ memcpy(variant->constants, state->constants, sizeof(variant->constants));
+
nir_shader *nir =
GENX(pan_blend_create_shader)(dev, state, src0_type, src1_type, rt);