管理多头内存
在从属头上每个图面的 DDSCAPS2 结构的 dwCaps2 成员中设置DDSCAPS2_ADDITIONALPRIMARY功能位会通知该头,这些图面是从分配给该头的视频内存中分配的最后一个图面。 然后,从属头应放弃对其视频内存分配给主头的控制,因为从属头保证它在应用程序的生存期内不会收到后续 的 DdCreateSurface 调用。
驱动程序必须确保主头能够分配与从属头关联的内存。
当运行时调用驱动程序的 DdDestroySurface 函数来销毁设置了DDSCAPS2_ADDITIONALPRIMARY功能位的从属头上的图面时,将通知驱动程序从属头再次控制其视频内存管理。
在大多数情况下,选择哪个头拥有视频内存是现有 DirectDraw 进程中固有的。 尤其是在下列情况下:
运行时保证在使用 DDSCAPS2_ADDITIONALPRIMARY 位进行 DdCreateSurface 调用后,不会对从属头发出后续分配请求。 因此,驱动程序无需随时限制来自其自己的视频内存池的分配。
终止或最小化应用程序时,将销毁所有图面。 因此,主头从从属头的池中创建的所有纹理都会被清理。
如果未为从属头上的图面设置DDSCAPS2_ADDITIONALPRIMARY位,则这些头会继续分配视频内存,就像它们是独立的头一样。 事实上,此类从属头在功能上与任何其他多监视器适配器相同。
驱动程序需要提供一个实现,其中主头从从头的池中分配内存,包括确定何时可以从从头的池中分配特定资源。 请注意,主头本身没有任何关于它是否参与多头方案的信息。 当主头耗尽其自己的视频内存时,它必须遍历其组中的所有从属头,以确定其中是否有任何一个头具有可供主 (使用的池,换句话说,以确定是否有任何从属头接收了DDSCAPS2_ADDITIONALPRIMARY位集) 的 DdCreateSurface 调用。
最后,请注意,运行时保证组中的所有头都参与多头方案。 因此,驱动程序必须仅保持一位状态,指示它当前是否处于多头模式。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈