Stefan Dösinger (@stefan) commented about dlls/mfmediaengine/tests/mfmediaengine.c:
}
ok(!enable_print, "ID3D11Device_GetImmediateContext\n");
ID3D11Device_GetImmediateContext(d3d11_dev, &d3d11_dev_ctx);
/* Map and unmap to wait for the Draw calls in MF to have finished. */
hr = ID3D11DeviceContext_Map(d3d11_dev_ctx, (ID3D11Resource *)video_texture, 0, D3D11_MAP_READ, 0, &mapped_subresource);
ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
ID3D11DeviceContext_Unmap(d3d11_dev_ctx, (ID3D11Resource *)video_texture, 0);
ID3D11DeviceContext_ClearState(d3d11_dev_ctx);
ID3D11DeviceContext_RSSetState(d3d11_dev_ctx, d3d11_rs);
ID3D11DeviceContext_OMSetRenderTargets(d3d11_dev_ctx, 1, &d3d11_rtv, NULL);
ID3D11DeviceContext_VSSetShader(d3d11_dev_ctx, d3d11_vs, NULL, 0);
ID3D11DeviceContext_PSSetShader(d3d11_dev_ctx, d3d11_ps, NULL, 0);
ID3D11DeviceContext_PSSetShaderResources(d3d11_dev_ctx, 0, 1, &d3d11_srv);
I think all of these only need to be called once, so you can pull them out of the render loop (that while(!event_ended) loop)