以追溯方式要求自由线程 CalcPrivate DDI

Direct3D 版本 11 追溯性要求以 pfnCalcPrivate 开头的用户模式显示驱动程序函数在 Direct3D 版本 10 的 DDI 函数中实现自由线程。 此追溯要求与 Direct3D 版本 11 DDI 的行为相匹配,即使驱动程序指示不支持 DDI 线程,也始终需要实现自由线程的 pfnCalcPrivate*pfnCalcDeferredContextHandleSize 函数。 有关驱动程序如何指示线程支持的详细信息,请参阅 支持线程、命令列表和三维管道。 这种追溯性要求的原因是,此类函数通常非常简单,因为它们返回大小立即值。 更复杂的函数根据传递给函数的参数决定要返回的即时值。 以 pfnCalcPrivate 开头的函数实际将任何数据写入堆栈以外的位置的要求不存在。 这些函数读取参数以外的任何数据的要求是罕见的。 读取数据的任何要求都不会产生争用问题。 这一事实使得 Direct3D 版本 11 API 能够进行急需的优化,并防止在每次创建对象时执行两次昂贵的同步(例如,对于 CreateResource(D3D10)CreateGeometryShader 的调用),而不是只执行一次。

此追溯自由线程要求的一个显著例外是用于满足显示设备创建功能的 CalcPrivateDeviceSize 函数。 CalcPrivateDeviceSize 位于适配器函数表(D3D10_2DDI_ADAPTERFUNCSD3D10DDI_ADAPTERFUNCS)。 CalcPrivateDeviceSize 不属于在线程模型中获得放宽的函数组。 无需在自由线程模式下调用 CalcPrivateDeviceSize 函数。