PFND3DDDI_CREATERESOURCE回调函数 (d3dumddi.h)
CreateResource 函数创建资源。
语法
PFND3DDDI_CREATERESOURCE Pfnd3dddiCreateresource;
HRESULT Pfnd3dddiCreateresource(
HANDLE hDevice,
D3DDDIARG_CREATERESOURCE *unnamedParam2
)
{...}
参数
hDevice
显示设备的句柄 (用于创建资源的图形上下文) 。
unnamedParam2
pResource [in, out]
指向描述所创建资源的 D3DDDIARG_CREATERESOURCE 结构的指针。
返回值
CreateResource 返回以下值之一:
返回代码 | 说明 |
---|---|
S_OK | 已成功创建资源。 |
E_OUTOFMEMORY | CreateResource 无法分配完成所需的内存。 |
D3DERR_NOTAVAILABLE | 除了无法分配内存之外,CreateResource 无法创建资源。 仅当创建顶点或索引缓冲区时,CreateResource 才能返回此错误。 |
注解
对 CreateResource 的调用可以包含图面列表。 由 pResource 参数指定的 D3DDDIARG_CREATERESOURCE 结构的 SurfCount 成员指定要创建的图面数(包括 MIP 映射级别)。 例如,256x256x9 纹理 MIP 贴图资源包含 9 个图面的列表,其中 SurfCount 成员和 MIP 贴图级别数都设置为 9。 包含 9 个 MIP 映射级别的多维数据集地图应将 MIP 映射级别数设置为 9, 将 SurfCount 设置为 54。 三面交换链应将 SurfCount 设置为 3,MIP 映射级别数应设置为 0。 请注意,MIP 映射级别数始终小于或等于 SurfCount 中的值。
为了响应 CreateResource 调用,用户模式显示驱动程序可以调用 pfnAllocateCb 函数来创建一个或多个内存分配。 用户模式显示驱动程序必须确定是必须为每个图面创建多个分配、为所有图面创建一个分配还是每个图面创建一个分配。 有关分配的详细信息,请参阅 视频内存管理和 GPU 计划。
(hDevice) 和进程,多个设备可以共享资源。 运行时通过在 D3DDDIARG_CREATERESOURCE 的 Flags 成员中设置 SharedResource 位字段标志来指定共享资源。 如果设置了此位字段标志,则用户模式显示驱动程序必须遵守对共享资源的以下限制:
- 用户模式显示驱动程序可以分别调用 pfnAllocateCb 和 pfnDeallocateCb 函数一次。
- 最初创建资源后,用户模式显示驱动程序无法为资源创建其他分配,并且同样只能在销毁资源本身时销毁资源分配。
- 当通过调用驱动程序的 CreateResource 或 OpenResource 函数创建或打开的共享资源调用用户模式显示驱动程序的 DestroyResource 函数时,驱动程序必须将 D3DDDICB_DEALLOCATE 结构的 hResource 成员设置为非 NULL,并在调用 pfnDeallocateCb 函数时将 D3DDDICB_DEALLOCATE 的 NumAllocations 成员设置为零,以销毁或关闭资源。 也就是说,不能单独销毁或关闭与共享资源关联的分配;必须在对 pfnDeallocateCb 的一次调用中以原子方式销毁或关闭资源。
- 对于资源类型,分配数必须一致 (也就是说,创建相同资源类型的另一个进程应) 生成相同的分配数和类型。 此外,不允许重命名这些资源。
- Flags 成员的未定义位是保留的。
- 如果未在 Flags 中设置主位字段标志,则会保留 RefreshRate 和 Output 成员。
- 如果未在 Flags 中设置 RenderTarget、DecodeRenderTarget 或 VideoProcessRenderTarget 位字段标志,则会保留 MultisampleType 和 MultisampleQuality 成员。
- 如果未在 Flags 中设置 VertexBuffer 位字段标志,则保留 Fvf 成员。
- 如果未在 Flags 中设置 Texture、CubeMap 和 Volume 位字段标志,则保留 MipLevels 成员。
新的 CreateResource DDI 在以下方面不同于 Microsoft Windows 2000 显示驱动程序模型的DdCreateSurface DDI:
- 在新的 CreateResource DDI 中,永远不会显式附加图面。 所有附件都由原子创建隐含。
- 在新的 CreateResource DDI 中,不允许部分创建多维数据集映射。
如果运行时请求创建顶点或索引缓冲区,并且用户模式显示驱动程序由于内存不足 (等原因而无法创建缓冲区,则) 缺少硬件支持,驱动程序必须失败并D3DERR_NOTAVAILABLE。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows Vista 和更高版本的 Windows 操作系统中可用。 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |