diff --git a/src/renderer.c b/src/renderer.c
index c8eef14a1a887de8b79c801d8b4e463aa9e0d5b2..194633e354bc1b4600320767dc40d2bea6067fd4 100644
--- a/src/renderer.c
+++ b/src/renderer.c
@@ -1022,19 +1022,23 @@ static bool plane_av1_grain(struct pass_state *pass, int plane_idx,
     if (!grain_params.tex)
         return false;
 
-    struct pl_shader *sh = pl_dispatch_begin_ex(rr->dp, true);
-    if (!pl_shader_av1_grain(sh, &rr->grain_state[plane_idx], &grain_params)) {
-        pl_dispatch_abort(rr->dp, &sh);
+    img->sh = pl_dispatch_begin_ex(rr->dp, true);
+    if (!pl_shader_av1_grain(img->sh, &rr->grain_state[plane_idx], &grain_params)) {
+        pl_dispatch_abort(rr->dp, &img->sh);
         rr->disable_grain = true;
         return false;
     }
 
+    img->tex = NULL;
     if (!img_tex(pass, img)) {
         PL_ERR(rr, "Failed applying AV1 grain.. disabling!");
+        pl_dispatch_abort(rr->dp, &img->sh);
+        img->tex = grain_params.tex;
         rr->disable_grain = true;
         return false;
     }
 
+    img->repr = repr;
     return true;
 }