st/nine: Improve Reset on Ex devices

Found with wine tests

Signed-off-by: Axel Davy <davyaxel0@gmail.com>
Acked-by: Timur Kristóf <timur.kristof@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10160>
This commit is contained in:
Axel Davy 2021-03-12 15:07:06 +01:00 committed by Marge Bot
parent ee580c96ef
commit 006338f702
3 changed files with 23 additions and 18 deletions

View File

@ -1995,6 +1995,8 @@ NineDevice9_SetRenderTarget( struct NineDevice9 *This,
This->state.scissor.miny = 0;
This->state.scissor.maxx = rt->desc.Width;
This->state.scissor.maxy = rt->desc.Height;
nine_context_set_viewport(This, &This->state.viewport);
nine_context_set_scissor(This, &This->state.scissor);
}
if (This->state.rt[i] != NineSurface9(pRenderTarget))

View File

@ -222,6 +222,7 @@ NineDevice9Ex_ResetEx( struct NineDevice9Ex *This,
D3DDISPLAYMODEEX *pFullscreenDisplayMode )
{
HRESULT hr = D3D_OK;
float MinZ, MaxZ;
unsigned i;
DBG("This=%p pPresentationParameters=%p pFullscreenDisplayMode=%p\n", This, pPresentationParameters, pFullscreenDisplayMode);
@ -235,8 +236,17 @@ NineDevice9Ex_ResetEx( struct NineDevice9Ex *This,
break;
}
MinZ = This->base.state.viewport.MinZ; /* These are preserved */
MaxZ = This->base.state.viewport.MaxZ;
NineDevice9_SetRenderTarget(
(struct NineDevice9 *)This, 0, (IDirect3DSurface9 *)This->base.swapchains[0]->buffers[0]);
This->base.state.viewport.MinZ = MinZ;
This->base.state.viewport.MaxZ = MaxZ;
nine_context_set_viewport(&This->base, &This->base.state.viewport);
if (This->base.nswapchains && This->base.swapchains[0]->params.EnableAutoDepthStencil)
NineDevice9_SetDepthStencilSurface(
&This->base, (IDirect3DSurface9 *)This->base.swapchains[0]->zsbuf);
return hr;
}
@ -246,6 +256,7 @@ NineDevice9Ex_Reset( struct NineDevice9Ex *This,
D3DPRESENT_PARAMETERS *pPresentationParameters )
{
HRESULT hr = D3D_OK;
float MinZ, MaxZ;
unsigned i;
DBG("This=%p pPresentationParameters=%p\n", This, pPresentationParameters);
@ -257,13 +268,17 @@ NineDevice9Ex_Reset( struct NineDevice9Ex *This,
break;
}
nine_csmt_process(&This->base);
nine_device_state_clear((struct NineDevice9 *)This);
nine_context_clear(&This->base);
NineDevice9_SetDefaultState((struct NineDevice9 *)This, TRUE);
MinZ = This->base.state.viewport.MinZ; /* These are preserved */
MaxZ = This->base.state.viewport.MaxZ;
NineDevice9_SetRenderTarget(
(struct NineDevice9 *)This, 0, (IDirect3DSurface9 *)This->base.swapchains[0]->buffers[0]);
This->base.state.viewport.MinZ = MinZ;
This->base.state.viewport.MaxZ = MaxZ;
nine_context_set_viewport(&This->base, &This->base.state.viewport);
if (This->base.nswapchains && This->base.swapchains[0]->params.EnableAutoDepthStencil)
NineDevice9_SetDepthStencilSurface(
&This->base, (IDirect3DSurface9 *)This->base.swapchains[0]->zsbuf);
return hr;
}

View File

@ -1851,19 +1851,7 @@ CSMT_ITEM_NO_WAIT(nine_context_set_render_target,
const unsigned i = RenderTargetIndex;
if (i == 0) {
context->viewport.X = 0;
context->viewport.Y = 0;
context->viewport.Width = rt->desc.Width;
context->viewport.Height = rt->desc.Height;
context->viewport.MinZ = 0.0f;
context->viewport.MaxZ = 1.0f;
context->scissor.minx = 0;
context->scissor.miny = 0;
context->scissor.maxx = rt->desc.Width;
context->scissor.maxy = rt->desc.Height;
context->changed.group |= NINE_STATE_VIEWPORT | NINE_STATE_SCISSOR | NINE_STATE_MULTISAMPLE;
context->changed.group |= NINE_STATE_MULTISAMPLE;
if (context->rt[0] &&
(context->rt[0]->desc.MultiSampleType <= D3DMULTISAMPLE_NONMASKABLE) !=