Context allocation
为给一个上下文的保留区域分配内存,KMD能够通过 DxgkCbCreateContextAllocation使用Context的Allocation。一些新功能被添加到上下文Allocation中,能够让这些Allocation能够适合新的GPU VA模型。
AccessedPhysically
一个上下文Allocation能够被指定为AccessedPhysically标志,代表这个资源应该被分配到连续的内存段或者被映射到aperture中能访问系统内存。
Assigning a GPU virtual address to a context allocation
VMM暴露了一个新的 DxgkCbMapContextAllocation 服务给KMD来分配GPU VA给上下文Allocation。
上下文Allocation被映射到与指定上下文关联的应用程序的GPU VA空间中。
注意:当上下文Allocation被直接映射到应用程序GPUVA空间时,驱动不应该暴露特权的信息。
这些服务的行为类似于用户模式的副本(PS:不太理解这一句These services behave like their user mode counterpart)。
Updating the content of a context allocation
有时KMD可能有需要更新一个上下文Allocation的内容。例如,一个特权上下文Allocation(AccessedPhysically,没有使用GPU虚拟地址映射)可能包含指向一个有关特殊上下文的页目录的引用。当KMD被 DxgkDdiSetRootPageTable通知这个页目录被改变位置时,KMD可能需要更新这个上下文Allocation的内容。
对于这种目的 DxgkCbUpdateContextAllocationDDI接口被添加。这个DDI接口发送一个请求给VMM执行队列来初始化这个上下文Allocation的更新操作。这个被更新的上下文Allocation被映射到了VMM换页进程的Scratch区域,之后驱动被UpdateContextAllocation换页操作调用,用来完成实际的上下文Allocation的更新操作。VMM会在更新操作完成之后返回DxgkCbUpdateContextAllocation。
KMD能够在调用DxgkCbUpdateContextAllocation 接口和UpdateContextAllocation换页操作的结果之间传递驱动的私有数据。