panfrost: Copy blend constant into variant even when reusing it
authorIcecream95 <ixn@disroot.org>
Thu, 5 May 2022 00:57:40 +0000 (12:57 +1200)
committerMarge Bot <emma+marge@anholt.net>
Fri, 20 May 2022 23:17:07 +0000 (23:17 +0000)
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>

src/panfrost/lib/pan_blend.c

index 8c212a8..0ffcd01 100644 (file)
@@ -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);