st/mesa: shader image atoms must be before framebuffer update
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Tue, 16 Feb 2016 03:49:58 +0000 (22:49 -0500)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 9 Mar 2016 16:40:06 +0000 (11:40 -0500)
The reason is that the shader image atoms call st_finalize_texture, which
may set ST_NEW_FRAMEBUFFER.

This fixes an assertion triggered by a subtest of piglit's
arb_shader_image_load_store-invalid.

v2: add comment explaining order constraints (suggested by Ilia)

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_atom.c

index 622621bdcbbab030fd432992f1f5b54b7be7ee0e..fc80adf6f8dc1106e235573c9d0127e5cc50d723 100644 (file)
@@ -62,7 +62,12 @@ static const struct st_tracked_state *render_atoms[] =
    &st_update_tessctrl_texture,
    &st_update_tesseval_texture,
    &st_update_sampler, /* depends on update_*_texture for swizzle */
-   &st_update_framebuffer,
+   &st_bind_vs_images,
+   &st_bind_tcs_images,
+   &st_bind_tes_images,
+   &st_bind_gs_images,
+   &st_bind_fs_images,
+   &st_update_framebuffer, /* depends on update_*_texture and bind_*_images */
    &st_update_msaa,
    &st_update_sample_shading,
    &st_update_vs_constants,
@@ -85,11 +90,6 @@ static const struct st_tracked_state *render_atoms[] =
    &st_bind_tes_ssbos,
    &st_bind_fs_ssbos,
    &st_bind_gs_ssbos,
-   &st_bind_vs_images,
-   &st_bind_tcs_images,
-   &st_bind_tes_images,
-   &st_bind_gs_images,
-   &st_bind_fs_images,
    &st_update_pixel_transfer,
    &st_update_tess,