diff options
Diffstat (limited to 'src/gallium/state_trackers/nine/device9.c')
-rw-r--r-- | src/gallium/state_trackers/nine/device9.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c index 5eb9d54f457..25e1444f6b4 100644 --- a/src/gallium/state_trackers/nine/device9.c +++ b/src/gallium/state_trackers/nine/device9.c @@ -3297,6 +3297,8 @@ NineDevice9_SetPixelShader( struct NineDevice9 *This, IDirect3DPixelShader9 *pShader ) { struct nine_state *state = This->update; + unsigned old_mask = state->ps ? state->ps->rt_mask : 1; + unsigned mask; DBG("This=%p pShader=%p\n", This, pShader); @@ -3304,6 +3306,12 @@ NineDevice9_SetPixelShader( struct NineDevice9 *This, state->changed.group |= NINE_STATE_PS; + mask = state->ps ? state->ps->rt_mask : 1; + /* We need to update cbufs if the pixel shader would + * write to different render targets */ + if (mask != old_mask) + state->changed.group |= NINE_STATE_FB; + return D3D_OK; } |