Signed-off-by: Zebediah Figura z.figura12@gmail.com --- v2: Expose a common helper in wined3d to be used for d3d9 and d3d8, and also move the check for format support to d3d9_CheckDeviceFormat().
dlls/d3d9/device.c | 2 ++ dlls/d3d9/directx.c | 14 ++++++++++++-- dlls/wined3d/device.c | 4 ++-- dlls/wined3d/wined3d.spec | 1 + include/wine/wined3d.h | 1 + 5 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index be9c2a9d5a..d949fd89b2 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -2319,6 +2319,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) + wined3d_device_resolve_depth_buffer(device->wined3d_device); wined3d_mutex_unlock();
return D3D_OK; diff --git a/dlls/d3d9/directx.c b/dlls/d3d9/directx.c index 1d3754adf8..d7fb30729d 100644 --- a/dlls/d3d9/directx.c +++ b/dlls/d3d9/directx.c @@ -289,8 +289,18 @@ static HRESULT WINAPI d3d9_CheckDeviceFormat(IDirect3D9Ex *iface, UINT adapter, }
wined3d_mutex_lock(); - hr = wined3d_check_device_format(d3d9->wined3d, adapter, device_type, wined3dformat_from_d3dformat(adapter_format), - usage, bind_flags, wined3d_rtype, wined3dformat_from_d3dformat(format)); + if ((enum wined3d_format_id)format == WINED3DFMT_RESZ) + { + DWORD levels; + hr = wined3d_check_device_multisample_type(d3d9->wined3d, adapter, device_type, + WINED3DFMT_D24_UNORM_S8_UINT, FALSE, WINED3D_MULTISAMPLE_NONE, &levels); + if (SUCCEEDED(hr) && !levels) + hr = D3DERR_NOTAVAILABLE; + } + else + hr = wined3d_check_device_format(d3d9->wined3d, adapter, device_type, + wined3dformat_from_d3dformat(adapter_format), usage, bind_flags, + wined3d_rtype, wined3dformat_from_d3dformat(format)); wined3d_mutex_unlock();
return hr; diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index acc915eb55..74dc21046b 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -1784,7 +1784,7 @@ void CDECL wined3d_device_get_viewports(const struct wined3d_device *device, uns *viewport_count = device->state.viewport_count; }
-static void resolve_depth_buffer(struct wined3d_device *device) +void CDECL wined3d_device_resolve_depth_buffer(struct wined3d_device *device) { const struct wined3d_state *state = &device->state; struct wined3d_rendertarget_view *src_view; @@ -1883,7 +1883,7 @@ void CDECL wined3d_device_set_render_state(struct wined3d_device *device, if (state == WINED3D_RS_POINTSIZE && value == WINED3D_RESZ_CODE) { TRACE("RESZ multisampled depth buffer resolve triggered.\n"); - resolve_depth_buffer(device); + wined3d_device_resolve_depth_buffer(device); } }
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index c8ef442c72..f42d2762c5 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -126,6 +126,7 @@ @ cdecl wined3d_device_process_vertices(ptr long long long ptr ptr long long) @ cdecl wined3d_device_release_focus_window(ptr) @ cdecl wined3d_device_reset(ptr ptr ptr ptr long) +@ cdecl wined3d_device_resolve_depth_buffer(ptr) @ cdecl wined3d_device_resolve_sub_resource(ptr ptr long ptr long long) @ cdecl wined3d_device_set_base_vertex_index(ptr long) @ cdecl wined3d_device_set_blend_state(ptr ptr ptr) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 8951f92d14..218e5e99f1 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2435,6 +2435,7 @@ void __cdecl wined3d_device_release_focus_window(struct wined3d_device *device); HRESULT __cdecl wined3d_device_reset(struct wined3d_device *device, const struct wined3d_swapchain_desc *swapchain_desc, const struct wined3d_display_mode *mode, wined3d_device_reset_cb callback, BOOL reset_state); +void __cdecl wined3d_device_resolve_depth_buffer(struct wined3d_device *device); void __cdecl wined3d_device_resolve_sub_resource(struct wined3d_device *device, struct wined3d_resource *dst_resource, unsigned int dst_sub_resource_idx, struct wined3d_resource *src_resource, unsigned int src_sub_resource_idx,