st/nine: Fix clear for multisample mismatch depth-stencil
Tests show in case of multisample mismatch between the depth-stencil buffer and the render target, then it is not cleared. Fixes failing WINE test visual.c test_multisample_mismatch(). Signed-off-by: Patrick Rudolph <siro@das-labor.org> Reviewed-by: Axel Davy <axel.davy@ens.fr>
This commit is contained in:
parent
7f58ba45a8
commit
924038c08f
|
@ -1887,15 +1887,18 @@ NineDevice9_Clear( struct NineDevice9 *This,
|
|||
Count = 0;
|
||||
#endif
|
||||
|
||||
nine_update_state_framebuffer(This);
|
||||
|
||||
if (Flags & D3DCLEAR_TARGET) bufs |= PIPE_CLEAR_COLOR;
|
||||
if (Flags & D3DCLEAR_ZBUFFER) bufs |= PIPE_CLEAR_DEPTH;
|
||||
if (Flags & D3DCLEAR_STENCIL) bufs |= PIPE_CLEAR_STENCIL;
|
||||
/* Ignore Z buffer if not bound */
|
||||
if (This->state.fb.zsbuf != NULL) {
|
||||
if (Flags & D3DCLEAR_ZBUFFER) bufs |= PIPE_CLEAR_DEPTH;
|
||||
if (Flags & D3DCLEAR_STENCIL) bufs |= PIPE_CLEAR_STENCIL;
|
||||
}
|
||||
if (!bufs)
|
||||
return D3D_OK;
|
||||
d3dcolor_to_pipe_color_union(&rgba, Color);
|
||||
|
||||
nine_update_state_framebuffer(This);
|
||||
|
||||
rect.x1 = This->state.viewport.X;
|
||||
rect.y1 = This->state.viewport.Y;
|
||||
rect.x2 = This->state.viewport.Width + rect.x1;
|
||||
|
@ -1938,7 +1941,6 @@ NineDevice9_Clear( struct NineDevice9 *This,
|
|||
/* Case we clear depth buffer (and eventually rt too).
|
||||
* depth buffer size is always >= rt size. Compare to clear region */
|
||||
((bufs & (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL)) &&
|
||||
This->state.fb.zsbuf != NULL &&
|
||||
rect.x2 >= zsbuf_surf->desc.Width &&
|
||||
rect.y2 >= zsbuf_surf->desc.Height))) {
|
||||
DBG("Clear fast path\n");
|
||||
|
|
Loading…
Reference in New Issue