[PATCH 3/5] d3d9: Handle multisample depth resolve in d3d9_device_SetRenderState().
Zebediah Figura
z.figura12 at gmail.com
Sat Dec 7 10:11:06 CST 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/d3d9/device.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index be9c2a9d5a1..35364046936 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -2299,6 +2299,34 @@ static HRESULT WINAPI d3d9_device_GetClipPlane(IDirect3DDevice9Ex *iface, DWORD
return hr;
}
+static void resolve_depth_buffer(struct d3d9_device *device)
+{
+ const struct wined3d_stateblock_state *state = wined3d_stateblock_get_state(device->state);
+ struct wined3d_rendertarget_view *wined3d_dsv;
+ struct wined3d_resource *dst_resource;
+ struct wined3d_texture *dst_texture;
+ struct wined3d_resource_desc desc;
+ struct d3d9_surface *d3d9_dsv;
+
+ if (!(dst_texture = state->textures[0]))
+ return;
+ dst_resource = wined3d_texture_get_resource(dst_texture);
+ wined3d_resource_get_desc(dst_resource, &desc);
+ if (desc.format != WINED3DFMT_D24_UNORM_S8_UINT
+ && desc.format != WINED3DFMT_X8D24_UNORM
+ && desc.format != MAKEFOURCC('D','F','1','6')
+ && desc.format != MAKEFOURCC('D','F','2','4')
+ && desc.format != WINED3DFMT_INTZ)
+ return;
+
+ if (!(wined3d_dsv = wined3d_device_get_depth_stencil_view(device->wined3d_device)))
+ return;
+ d3d9_dsv = wined3d_rendertarget_view_get_sub_resource_parent(wined3d_dsv);
+
+ wined3d_device_resolve_sub_resource(device->wined3d_device, dst_resource, 0,
+ wined3d_rendertarget_view_get_resource(wined3d_dsv), d3d9_dsv->sub_resource_idx, desc.format);
+}
+
static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_device_SetRenderState(IDirect3DDevice9Ex *iface,
D3DRENDERSTATETYPE state, DWORD value)
{
@@ -2319,6 +2347,8 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_device_SetRenderState(IDirect3DDevi
else
wined3d_device_set_render_state(device->wined3d_device, state, value);
}
+ if (state == D3DRS_POINTSIZE && value == WINED3D_RESZ_CODE)
+ resolve_depth_buffer(device);
wined3d_mutex_unlock();
return D3D_OK;
--
2.23.0
More information about the wine-devel
mailing list