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

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

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