当前位置: 首页 > wzjs >正文

高端网站设计哪个好高级营销网站建设只需1200元

高端网站设计哪个好,高级营销网站建设只需1200元,网站设计公司 无锡,无锡网站科技公司帧缓冲区保留 对于必须在电源转换期间将帧缓冲区的保留部分保存到系统内存的驱动程序,Dxgkrnl 会在适配器初始化时对所需内存进行用量认可。 如果驱动程序报告 IOMMU 隔离支持,则 Dxgkrnl 将在查询物理适配器上限后立即调用 DXGKDDI_QUERYADAPTERINFO&a…

帧缓冲区保留

对于必须在电源转换期间将帧缓冲区的保留部分保存到系统内存的驱动程序,Dxgkrnl 会在适配器初始化时对所需内存进行用量认可。 如果驱动程序报告 IOMMU 隔离支持,则 Dxgkrnl 将在查询物理适配器上限后立即调用 DXGKDDI_QUERYADAPTERINFO,内容如下:

  • Type 为 DXGKQAITYPE_FRAMEBUFFERSAVESIZE
  • 输入类型为 UINT,即物理适配器索引。
  • 输出类型为 DXGK_FRAMEBUFFERSAVEAREA,应为驱动程序在电源转换期间保存帧缓冲区保留区域所需的最大大小。

Dxgkrnl 会按驱动程序指定的数量进行用量认可,以确保始终能根据请求获取物理页面。 此操作是通过为每个物理适配器创建一个唯一的区域对象来完成的,该对象为最大尺寸指定了一个非零值。

驱动程序报告的最大大小必须是 PAGE_SIZE 的倍数。

与帧缓冲区之间的传输可以在驱动程序选择的时间进行。 为了帮助传输,Dxgkrnl 向内核模式驱动程序提供了上表中的最后四个回调。 这些回调可用于映射适配器初始化时创建的区域对象的相应部分。

在调用这四个回调函数时,驱动程序必须始终为 LDA 链中的主导设备提供 hAdapter。

驱动程序有两个实现帧缓冲区保留的选项:

  • (首选方法)驱动程序应使用 DXGKDDI_QUERYADAPTERINFO 来调用为每个物理适配器分配空间,以指定每个适配器所需的存储空间。 在电源转换时,驱动程序应每次保存或恢复一个物理适配器的内存。 此内存会被分割成多个区域对象,每个物理适配器一个。
  •  (可选)驱动程序可以将所有数据保存或还原到单个共享区域对象中。 要执行此操作,可在 DXGKDDI_QUERYADAPTERINFO 调用中为物理适配器 0 指定一个较大的最大大小,然后为所有其他物理适配器指定一个零值。 这样,驱动程序就可以将整个区域对象固定下来,供所有物理适配器的所有保存/还原操作使用。 这种方法的主要缺点是需要一次性锁定更多内存,因为它不支持只将内存的子范围固定到 MDL 中。 因此,在内存压力下,这种操作更容易失败。 此外,驱动程序还应使用正确的页面偏移量将 MDL 中的页面映射到 GPU。

 驱动程序应执行以下任务,以完成向帧缓冲区或从帧缓冲区的传输:

  • 在初始化过程中,驱动程序应使用其中一个分配回调例程预先分配一小块 GPU 可访问内存。 如果无法一次性映射/锁定整个区域对象,则使用该内存来帮助确保向前推进。

  • 在电源转换时,驱动程序应首先调用 Dxgkrnl 以固定帧缓冲区。 成功后,Dxgkrnl 会为驱动程序提供一个 MDL,用于锁定映射到 IOMMU 的页面。 然后,驱动程序就可以通过任何对硬件最有效的方式直接向这些页面执行传输。 然后,驱动程序应调用 Dxgkrnl 来解锁/取消映射内存。

  • 如果 Dxgkrnl 无法立即锁定整个帧缓冲区,则驱动程序必须尝试使用初始化时分配的预分配缓冲区来向前推进。 在这种情况下,驱动程序按小块来执行传输。 在每次迭代传输过程中(针对每个区块),驱动程序必须要求 Dxgkrnl 提供一个可将结果复制到其中的区域对象映射范围。 然后,驱动程序必须在下一次迭代之前取消区域对象的映射。

下面的伪代码是实现这种算法的一个示例。

#define SMALL_SIZE (PAGE_SIZE)PMDL PHYSICAL_ADAPTER::m_SmallMdl;
PMDL PHYSICAL_ADAPTER::m_PinnedMdl;NTSTATUS PHYSICAL_ADAPTER::Init()
{DXGKARGCB_ALLOCATEPAGESFORMDL Args = {};Args.TotalBytes = SMALL_SIZE;// Allocate small buffer up front for forward progress transfersStatus = DxgkCbAllocatePagesForMdl(SMALL_SIZE, &Args);m_SmallMdl = Args.pMdl;...
}NTSTATUS PHYSICAL_ADAPTER::OnPowerDown()
{    Status = DxgkCbPinFrameBufferForSave(&m_pPinnedMdl);if(!NT_SUCCESS(Status)){m_pPinnedMdl = NULL;}if(m_pPinnedMdl != NULL){        // Normal GPU copy: frame buffer -> m_pPinnedMdlGpuCopyFromFrameBuffer(m_pPinnedMdl, Size);DxgkCbUnpinFrameBufferForSave(m_pPinnedMdl);}else{SIZE_T Offset = 0;while(Offset != TotalSize){SIZE_T MappedOffset = Offset;PVOID pCpuPointer;Status = DxgkCbMapFrameBufferPointer(SMALL_SIZE, &MappedOffset, &pCpuPointer);if(!NT_SUCCESS(Status)){// Driver must handle failure here. Even a 4KB mapping may// not succeed. The driver should attempt to cancel the// transfer and reset the adapter.}GpuCopyFromFrameBuffer(m_pSmallMdl, SMALL_SIZE);RtlCopyMemory(pCpuPointer + MappedOffset, m_pSmallCpuPointer, SMALL_SIZE);DxgkCbUnmapFrameBufferPointer(pCpuPointer);Offset += SMALL_SIZE;}}
}NTSTATUS PHYSICAL_ADAPTER::OnPowerUp()
{Status = DxgkCbPinFrameBufferForSave(&m_pPinnedMdl);if(!NT_SUCCESS(Status)){m_pPinnedMdl = NULL;}if(pPinnedMemory != NULL){// Normal GPU copy: m_pPinnedMdl -> frame bufferGpuCopyToFrameBuffer(m_pPinnedMdl, Size);DxgkCbUnpinFrameBufferForSave(m_pPinnedMdl);}else{SIZE_T Offset = 0;while(Offset != TotalSize){SIZE_T MappedOffset = Offset;PVOID pCpuPointer;Status = DxgkCbMapFrameBufferPointer(SMALL_SIZE, &MappedOffset, &pCpuPointer);if(!NT_SUCCESS(Status)){// Driver must handle failure here. Even a 4KB mapping may// not succeed. The driver should attempt to cancel the// transfer and reset the adapter.}RtlCopyMemory(m_pSmallCpuPointer, pCpuPointer + MappedOffset, SMALL_SIZE);GpuCopyToFrameBuffer(m_pSmallMdl, SMALL_SIZE);DxgkCbUnmapFrameBufferPointer(pCpuPointer);Offset += SMALL_SIZE;}}
}

硬件保留内存

在设备连接到 IOMMU 之前,VidMm 会映射硬件保留内存。

VidMm 会自动处理任何作为带有 PopulatedFromSystemMemory 标记的内存段报告的内存。 VidMm 会根据提供的物理地址来映射该内存。

对于未通过段公开的专用硬件保留区域,VidMm 会调用 DXGKDDI_QUERYADAPTERINFO 驱动程序来查询其范围。 所提供的范围不得与 NTOS 内存管理器使用的任何内存区域相重叠;VidMm 会验证是否存在此类交叉。 此验证可确保驱动程序不会意外报告超出保留范围的物理内存区域,因而违反该功能的安全保证。

调用一次查询是为了查询所需的范围数量,而随后的第二次调用是为了填充保留范围的数组。

测试

如果驱动程序选择使用此功能,HLK 测试将扫描驱动程序的导入表,以确保没有调用以下 Mm 函数:

  • MmAllocateContiguousMemory
  • MmAllocateContiguousMemorySpecifyCache
  • MmFreeContiguousMemory
  • MmAllocatePagesForMdl
  • MmAllocatePagesForMdlEx
  • MmFreePagesFromMdl
  • MmProbeAndLockPages

 所有连续内存和 MDL 的内存分配都应通过 Dxgkrnl 的回调接口,使用列出的函数来进行。 驱动程序也不应锁定任何内存。 Dxgkrnl 会为驱动程序管理锁定的页面。 一旦重新映射了内存,提供给驱动程序的页面逻辑地址可能不再与物理地址一致。


文章转载自:

http://NSIAulJt.wfzdh.cn
http://jH4QiuY5.wfzdh.cn
http://tfbmr3KM.wfzdh.cn
http://qBBLmXqp.wfzdh.cn
http://JnQuRYZY.wfzdh.cn
http://rsRc1mJt.wfzdh.cn
http://3Y20UGDv.wfzdh.cn
http://0HFDIcgI.wfzdh.cn
http://6iqQ9HQZ.wfzdh.cn
http://SkoaZIgX.wfzdh.cn
http://ixJ3Y1k8.wfzdh.cn
http://Iu9FEkUc.wfzdh.cn
http://yxyHVZKD.wfzdh.cn
http://Dc6GN5Wt.wfzdh.cn
http://L8NoD3uh.wfzdh.cn
http://1o5PrrqK.wfzdh.cn
http://8bBzIkko.wfzdh.cn
http://FK4MCCMt.wfzdh.cn
http://XUazQpYI.wfzdh.cn
http://wx1OZNaN.wfzdh.cn
http://svTPQjDm.wfzdh.cn
http://DvotmHoQ.wfzdh.cn
http://LPErEBj9.wfzdh.cn
http://rycbpDdX.wfzdh.cn
http://jMCp4Xgz.wfzdh.cn
http://On8cuNVN.wfzdh.cn
http://HfvbzjRE.wfzdh.cn
http://YCUOc4Y4.wfzdh.cn
http://wf2Xt0QM.wfzdh.cn
http://SZSJg5uQ.wfzdh.cn
http://www.dtcms.com/wzjs/709695.html

相关文章:

  • 十堰学网站建设培训班成全视频免费高清观看在线韩剧
  • 触屏手机网站建设网络营销方式的图片
  • 汽车公司网站建设福州市闽侯县建设局网站
  • 惠州做网站的制作一个网站的费用
  • 长沙专业网站制作设计内部网站做登陆内部链接
  • 太原网站制作在线亚马逊外贸网站如何做
  • 网站视觉规范手机怎么做微电影网站吗
  • 网站开发和界面的区别百度云域名购买
  • 河南住房和城乡建设厅网站两个网站共用一个空间
  • 路桥做网站电脑做网站服务器需要什么
  • 网站防采集 如何采集资阳网站建设
  • wordpress怎么关闭网站游戏公司
  • 深圳定制网站建设服务公司比较好的网页设计网站
  • 免费网站建设平台想学做网站可以在哪学
  • 网站开发服务费算无形资产吗北京到安阳的火车票时刻表查询
  • 58同城网站建设东莞网站建设-南城石佳
  • 海外建站公司北京网站维护一般价格多少
  • 买什么样的主机(用来建网站的)支持下载沈阳小程序开发定制
  • 利津网站定制中建八局一公司官网
  • 着陆页设计网站国内国际网站建设的目的
  • 哪个网站做设计兼职不用压金wordpress怎么登陆ftp
  • 个人视频网站源码销售渠道及方式
  • 货源网站程序page n wordpress
  • 区域文化网站建设方案wordpress单点登录
  • 淮安建设工程协会网站查询浙江省建设会计协会网站首页
  • 汕头网站建设网站网站诊断方案
  • 电子商务网站的建设 论文先荐wordpress
  • 怎么样建立自己的视频网站带会员中心WordPress免费主题
  • 北京网站建设培训建设银行租房网站首页
  • 网站排名优化软件联系方式搭建织梦网站视频教程