On Thu, 8 Jul 2021 at 01:13, Zebediah Figura zfigura@codeweavers.com wrote:
@@ -1068,6 +1068,7 @@ static void STDMETHODCALLTYPE d3d11_device_context_OMSetRenderTargets(ID3D11Devi UINT render_target_view_count, ID3D11RenderTargetView *const *render_target_views, ID3D11DepthStencilView *depth_stencil_view) {
- struct wined3d_rendertarget_view *wined3d_rtvs[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT] = {0}; struct d3d11_device_context *context = impl_from_ID3D11DeviceContext1(iface); struct d3d_depthstencil_view *dsv; unsigned int i;
@@ -1075,19 +1076,18 @@ static void STDMETHODCALLTYPE d3d11_device_context_OMSetRenderTargets(ID3D11Devi TRACE("iface %p, render_target_view_count %u, render_target_views %p, depth_stencil_view %p.\n", iface, render_target_view_count, render_target_views, depth_stencil_view);
- wined3d_mutex_lock(); for (i = 0; i < render_target_view_count; ++i) { struct d3d_rendertarget_view *rtv = unsafe_impl_from_ID3D11RenderTargetView(render_target_views[i]);
wined3d_device_context_set_rendertarget_view(context->wined3d_context, i,
rtv ? rtv->wined3d_view : NULL, FALSE);
- }
- for (; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
- {
wined3d_device_context_set_rendertarget_view(context->wined3d_context, i, NULL, FALSE);
wined3d_rtvs[i] = rtv ? rtv->wined3d_view : NULL;
}
dsv = unsafe_impl_from_ID3D11DepthStencilView(depth_stencil_view);
wined3d_mutex_lock();
wined3d_device_context_set_rendertarget_views(context->wined3d_context, 0,
ARRAY_SIZE(wined3d_rtvs), wined3d_rtvs, FALSE);
wined3d_device_context_set_depth_stencil_view(context->wined3d_context, dsv ? dsv->wined3d_view : NULL); wined3d_mutex_unlock();
}
Like 1/6 and 3/6.
- /* Release after the assignment, to prevent device_resource_released()
* from seeing the surface as still in use. */
- if (prev)
- {
wined3d_rtv_bind_count_dec(prev);
wined3d_rendertarget_view_decref(prev);
- }
struct wined3d_rendertarget_view *prev = state->fb.render_targets[start_idx + i];
struct wined3d_rendertarget_view *view = views[i];
- wined3d_device_context_unbind_srv_for_rtv(context, view, FALSE);
if (view)
{
wined3d_rendertarget_view_incref(view);
wined3d_rtv_bind_count_inc(view);
}
state->fb.render_targets[start_idx + i] = view;
/* Release after the assignment, to prevent device_resource_released()
* from seeing the surface as still in use. */
Since we're touching it, "resource" instead of "surface", these days.