From: Axel Davy Date: Sat, 13 Oct 2018 21:21:36 +0000 (+0200) Subject: st/nine: Fix aliasing states for stateblocks X-Git-Tag: upstream/19.0.0~1977 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6f373b9b743daba5b31c18ceb7385bc6105105b6;p=platform%2Fupstream%2Fmesa.git st/nine: Fix aliasing states for stateblocks If NINE_STATE_FF_MATERIAL is set, the stateblock will upload its recorded materials matrix. If NINE_STATE_FF_LIGHTING is set, the lighting set is uploaded. These flags could be set by a NineDevice9_SetTransform call or by setting some states related to ff, but that shouldn't trigger these stateblock behaviours. We don't need to follow the context states dirtied by render states. NINE_STATE_FF_VSTRANSF is exactly the state controlling stateblock updates of transformation matrices, NINE_STATE_FF is too broad. These two changes avoid setting the two mentionned states when we shouldn't. Fixes: https://github.com/iXit/Mesa-3D/issues/320 Signed-off-by: Axel Davy --- diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c index 461b212..1a3f2c3 100644 --- a/src/gallium/state_trackers/nine/device9.c +++ b/src/gallium/state_trackers/nine/device9.c @@ -2014,7 +2014,7 @@ NineDevice9_SetTransform( struct NineDevice9 *This, *M = *pMatrix; if (unlikely(This->is_recording)) { state->ff.changed.transform[State / 32] |= 1 << (State % 32); - state->changed.group |= NINE_STATE_FF; + state->changed.group |= NINE_STATE_FF_VSTRANSF; } else nine_context_set_transform(This, State, pMatrix); @@ -2261,7 +2261,6 @@ NineDevice9_SetRenderState( struct NineDevice9 *This, state->rs_advertised[State] = Value; /* only need to record changed render states for stateblocks */ state->changed.rs[State / 32] |= 1 << (State % 32); - state->changed.group |= nine_render_state_group[State]; return D3D_OK; }