st/nine: Ignore MULTISAMPLEMASK when RT is not multisampled

We were ignoring MULTISAMPLEMASK for non-maskable multisample
modes, but we were missing the non-multisampled case.

Fixes a crash in Halo.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
This commit is contained in:
Axel Davy 2016-11-20 10:55:54 +01:00
parent bce9fe8db2
commit 85811d0e87
2 changed files with 3 additions and 3 deletions

View file

@ -1842,8 +1842,8 @@ NineDevice9_SetRenderTarget( struct NineDevice9 *This,
This->state.changed.group |= NINE_STATE_VIEWPORT | NINE_STATE_SCISSOR | NINE_STATE_MULTISAMPLE;
if (This->state.rt[0] &&
(This->state.rt[0]->desc.MultiSampleType == D3DMULTISAMPLE_NONMASKABLE) !=
(rt->desc.MultiSampleType == D3DMULTISAMPLE_NONMASKABLE))
(This->state.rt[0]->desc.MultiSampleType <= D3DMULTISAMPLE_NONMASKABLE) !=
(rt->desc.MultiSampleType <= D3DMULTISAMPLE_NONMASKABLE))
This->state.changed.group |= NINE_STATE_SAMPLE_MASK;
}

View file

@ -1100,7 +1100,7 @@ nine_update_state(struct NineDevice9 *device)
pipe->set_blend_color(pipe, &color);
}
if (group & NINE_STATE_SAMPLE_MASK) {
if (state->rt[0]->desc.MultiSampleType == D3DMULTISAMPLE_NONMASKABLE) {
if (state->rt[0]->desc.MultiSampleType <= D3DMULTISAMPLE_NONMASKABLE) {
pipe->set_sample_mask(pipe, ~0);
} else {
pipe->set_sample_mask(pipe, state->rs[D3DRS_MULTISAMPLEMASK]);