Specifying Memory Type for a Resource
当UMD收到创建surface资源请求的时候需要使用收到关于内存内存类型的信息。内存类型可以通过D3DDDIPOOL_SYSTEMMEM或D3DDDIPOOL_VIDEOMEMORY指定为系统内存或者显存,该信息在D3DDDIARG_CREATERESOURCE的Pool成员中。另外MSFT D3D RT在Pool中了给出了驱动使用的显存类型:
-
D3DDDIPOOL_LOCALVIDMEM
RT 建议驱动使用本地显存.
-
D3DDDIPOOL_NONLOCALVIDMEM
RT 建议驱动使用非本地显存(例如 AGP内存).
RT提供了一些信息让UMD来提升性能。例如CPU对Surface写操作, RT可能指定使用D3DDDIPOOL_NONLOCALVIDMEM,因为CPU写入非本地显存会更快。
UMD通过D3DDDI_ALLOCATIONINFO和DXGK_ALLOCATIONINFO的pPrivateDriverData提供了一些信息给KMD。KMD在被调用DxgkDdiCreateAllocation时,通过DXGK_ALLOCATIONINFO的HintedSegmentId返回内存段的标识符给VMM使用适当的内存段。
无论使用哪种显存类型创建资源,UMD不能让RT感觉到任何的操作不一致(PS: 也就是对于本地显存或是非本地显存RT的操作是一致的)。 对每个现存类型,驱动渲染的一样的内容必须返回同样的值。