summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers
diff options
context:
space:
mode:
authorRoland Scheidegger <[email protected]>2016-01-21 00:04:56 +0100
committerRoland Scheidegger <[email protected]>2016-01-21 00:09:55 +0100
commite925ec881128651b97ba747f644e921597a1c209 (patch)
treeb2d12cf28fac574f4c7d7a26f618436239f66da2 /src/gallium/drivers
parentdc3ac418bf889620c93f50c68ef55b9e9de3afd3 (diff)
llvmpipe,i915: add back NEW_RASTERIZER dependency when computing vertex info
I removed this mistakenly in 2dbc20e45689e09766552517a74e2270e49817b5. I actually thought it should not be necessary and a piglit run didn't show any differences, but this shouldn't have been in there. draw_prepare_shader_outputs() is in fact dependent on NEW_RASTERIZER. The new polygon-mode-facing test indeed shows why this is necessary, there's lots of invalid reads and writes with valgrind (also crashes without valgrind), because the pre-pipeline vertex size doesn't match the post-pipeline vertex size (note this won't help much with stages which don't have the prepare hook which can grow the vertex size, in particular the wide point stage, but this isn't used by llvmpipe). The test still won't pass, of course, but it is only usage of uninitialized values now, which is much less dangerous... (Albeit I'm pretty sure for i915 it really is not needed anymore as it doesn't care about the extra outputs and doesn't call draw_prepare_shader_outputs().) Reviewed-by: Jose Fonseca <[email protected]>
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r--src/gallium/drivers/i915/i915_state_derived.c2
-rw-r--r--src/gallium/drivers/llvmpipe/lp_state_derived.c6
2 files changed, 5 insertions, 3 deletions
diff --git a/src/gallium/drivers/i915/i915_state_derived.c b/src/gallium/drivers/i915/i915_state_derived.c
index bd0f448f645..177b8545985 100644
--- a/src/gallium/drivers/i915/i915_state_derived.c
+++ b/src/gallium/drivers/i915/i915_state_derived.c
@@ -184,7 +184,7 @@ static void calculate_vertex_layout(struct i915_context *i915)
struct i915_tracked_state i915_update_vertex_layout = {
"vertex_layout",
calculate_vertex_layout,
- I915_NEW_FS | I915_NEW_VS
+ I915_NEW_RASTERIZER | I915_NEW_FS | I915_NEW_VS
};
diff --git a/src/gallium/drivers/llvmpipe/lp_state_derived.c b/src/gallium/drivers/llvmpipe/lp_state_derived.c
index 34961cbbac5..c90f2f270fe 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_derived.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_derived.c
@@ -190,8 +190,10 @@ void llvmpipe_update_derived( struct llvmpipe_context *llvmpipe )
llvmpipe->tex_timestamp = lp_screen->timestamp;
llvmpipe->dirty |= LP_NEW_SAMPLER_VIEW;
}
-
- if (llvmpipe->dirty & (LP_NEW_FS |
+
+ /* This needs LP_NEW_RASTERIZER because of draw_prepare_shader_outputs(). */
+ if (llvmpipe->dirty & (LP_NEW_RASTERIZER |
+ LP_NEW_FS |
LP_NEW_VS))
compute_vertex_info(llvmpipe);