From: Stian Low <wineryyyyy@gmail.com> --- dlls/d3d11/view.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/dlls/d3d11/view.c b/dlls/d3d11/view.c index ec55dba5cf3..fd2ff9da206 100644 --- a/dlls/d3d11/view.c +++ b/dlls/d3d11/view.c @@ -1709,6 +1709,7 @@ static HRESULT d3d_rendertarget_view_init(struct d3d_rendertarget_view *view, st { struct wined3d_resource *wined3d_resource; struct wined3d_view_desc wined3d_desc; + struct wined3d_swapchain *swapchain; HRESULT hr; view->ID3D11RenderTargetView_iface.lpVtbl = &d3d11_rendertarget_view_vtbl; @@ -1736,6 +1737,43 @@ static HRESULT d3d_rendertarget_view_init(struct d3d_rendertarget_view *view, st } wined3d_rendertarget_view_desc_from_d3d11(&wined3d_desc, &view->desc); + + if ((swapchain = wined3d_swapchain_from_resource(wined3d_resource))) + { + if (wined3d_swapchain_get_back_buffer(swapchain, 0) != wined3d_texture_from_resource(wined3d_resource)) + { + wined3d_mutex_unlock(); + ERR("RTVs texture does not match swapchain back_buffers[0]\n"); + return E_INVALIDARG; + } + else + { + struct wined3d_device_creation_parameters params; + struct wined3d_adapter *wined3d_adapter; + enum wined3d_format_id wined3d_format; + struct wined3d *wined3d; + + wined3d_format = wined3dformat_from_dxgi_format(view->desc.Format); + if (view->desc.Format && !wined3d_format) + { + WARN("Invalid format %#x.\n", view->desc.Format); + return E_FAIL; + } + wined3d_device_get_creation_parameters(device->wined3d_device, ¶ms); + wined3d = wined3d_device_get_wined3d(device->wined3d_device); + wined3d_adapter = wined3d_get_adapter(wined3d, params.adapter_idx); + hr = wined3d_check_device_format(wined3d, wined3d_adapter, params.device_type, WINED3DFMT_UNKNOWN, + WINED3DUSAGE_QUERY_BACK_BUFFER_CAST, 0, WINED3D_RTYPE_TEXTURE_2D, wined3d_format); + if (hr == WINED3DERR_NOTAVAILABLE || hr == WINED3DOK_NOMIPGEN) + { + wined3d_mutex_unlock(); + ERR("Failed to get format support\n"); + return hr; + } + } + } + + if (FAILED(hr = wined3d_rendertarget_view_create(&wined3d_desc, wined3d_resource, view, &d3d_render_target_view_wined3d_parent_ops, &view->wined3d_view))) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10567