VR SLI Issues

I’m trying to use the VR SLI “broadcast” technique and am running into some weird problems that I’m hoping someone has insight for. I’m using version R367 of the NVAPI which comes with the VRWorks-2.0-Package.zip.

  1. Whenever I call ID3D11MultiGPUDevice::VSSetConstantBuffers(), a “0” with a newline is printed to my console window. This is quite annoying, and I can’t imagine it helps performance! Is this something that’s happening inside the API? Is there any way to mute it? Does it mean some kind of error has happened?

  2. I’m very confused by how the ID3D11MultiGPUDevice functions work. For example, let’s take ID3D11MultiGPUDevice::SetViewports(). The documentation seems to imply that you specify a GPU Mask, and it otherwise behaves the same as ID3D11DeviceContext::RSSetViewports(). Thus, I’d expect to use it this way:

m_pMultiGPUDevice->SetViewports(m_pCtx, 1, 1, pViewport0);
m_pMultiGPUDevice->SetViewports(m_pCtx, 2, 1, pViewport1);

However, the vr_sli_demo example code seems to use it this way:

// Set both viewports, one on each GPU
D3D11_VIEWPORT viewports[2] =
{
	{ 0, 0, float(g_dimsPreWarp.x / 2), float(g_dimsPreWarp.y), 0, 1 },								// Left
	{ float(g_dimsPreWarp.x / 2), 0, float(g_dimsPreWarp.x / 2), float(g_dimsPreWarp.y), 0, 1 },	// Right
};
CHECK_NVAPI_WARN(m_pMultiGPUDevice->SetViewports(m_pCtx, NVAPI_ALL_GPUS, 1, viewports));

Is this some kind of hidden feature, where you can call it once with NVAPI_ALL_GPUS, and GPU 0 gets index 0, and GPU 1 gets index 1? Does my way also work?