vc4: fix vc4_yuv_blit overwriting fragment constant buffer slot 0
authorChris Lord <clord@igalia.com>
Fri, 28 Feb 2020 15:18:14 +0000 (15:18 +0000)
committerMarge Bot <eric+marge@anholt.net>
Tue, 3 Mar 2020 19:06:03 +0000 (19:06 +0000)
vc4_yuv_blit calls util_blitter_restore_constant_buffer_state without
first calling util_blitter_save_fragment_constant_buffer_slot. This causes
subsequent crashes in vc4_write_uniforms when using fragment shaders that
reference YUV textures.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/2581
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3997>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3997>

src/gallium/drivers/vc4/vc4_blit.c

index 93b1478ddd19c95cdc4ff3636dc8a523a1307af7..4e4c4898ea8b76d02d5571f3f4db40b5d42c26e2 100644 (file)
@@ -165,6 +165,8 @@ vc4_tile_blit(struct pipe_context *pctx, const struct pipe_blit_info *info)
 void
 vc4_blitter_save(struct vc4_context *vc4)
 {
+        util_blitter_save_fragment_constant_buffer_slot(vc4->blitter,
+                                                        vc4->constbuf[PIPE_SHADER_FRAGMENT].cb);
         util_blitter_save_vertex_buffer_slot(vc4->blitter, vc4->vertexbuf.vb);
         util_blitter_save_vertex_elements(vc4->blitter, vc4->vtx);
         util_blitter_save_vertex_shader(vc4->blitter, vc4->prog.bind_vs);