我使用顶点和像素着色器来执行基本操作,例如顶点着色器中的矩阵乘法和使用像素着色器的纹理采样。我想知道下面的语句,最后一个语句是否等到执行顶点和像素着色器操作。
deviceContext->VSSetShader(VS, NULL, 0);
deviceContext->PSSetShader(PS, NULL, 0);
deviceContext->PSSetSamplers(0, 1, &Sampler);
deviceContext->DrawIndexed(IndexCount, 0, 0); // Does it wait for pixel operations to be performed on all pixels?
答案 0 :(得分:2)
在D3D中,工作按照提交的顺序在GPU上执行,但一般情况下它不与CPU同步。例如,在你的代码中,当CPU DrawIndexed
返回时,GPU很可能还没有开始渲染。通常,成千上万的命令“在飞行中”。在D3D11中,您通常不需要关心这种行为,事实上,在API中引入竞争条件是有意的。例如,当您调用Present
时,GPU将自动清除所有渲染,等待影响交换链的所有调用完成,并向窗口显示正确的图像。
总结 - 不,D3D不会在从Draw
调用返回之前等待顶点/像素着色器操作完成,但通常你可以忽略这一事实。