DXGKDDI_CREATEALLOCATION callback function

DXGKDDI_CREATEALLOCATION callback function

该DDI创建了系统内存或视频内存资源。

Syntax

DXGKDDI_CREATEALLOCATION DxgkddiCreateallocation;

NTSTATUS DxgkddiCreateallocation(
  IN_CONST_HANDLE hAdapter,
  INOUT_PDXGKARG_CREATEALLOCATION pCreateAllocation
)
{...}

Parameters

hAdapter

[in] 关联着显卡的context的句柄。KMD之前DxgkDdiAddDevice函数中通过MiniportDeviceContext参数传给了DXGK。

pCreateAllocation

[in/out] 指向包含创建资源的信息的 DXGKARG_CREATEALLOCATION 结构的指针。

Return Value

DxgkDdiCreateAllocation returns one of the following values:

Return codeDescription
STATUS_SUCCESSDxgkDdiCreateAllocation successfully created the allocation.
STATUS_INVALID_PARAMETERParameters that were passed to DxgkDdiCreateAllocation contained errors that prevented it from completing.
STATUS_NO_MEMORYDxgkDdiCreateAllocation could not allocate memory that was required for it to complete.
STATUS_GRAPHICS_DRIVER_MISMATCHThe display miniport driver is not compatible with the user-mode display driver that initiated the call to DxgkDdiCreateAllocation.

Remarks

在UMD调用pfnAllocateCb之后,DXGK调用KMD的 DxgkDdiCreateAllocation 函数来创建allocation。KMD必须解释由UMD传下来的私有数据(该数据保存在每个allocation的DXGK_ALLOCATIONINFO结构的pPrivateDriverData成员中),并确定通过VMM创建每个allocation所需要的参数列表。更多关于KMD如何提供这些参数给VMM,参见Specifying Segments When Creating Allocations.

KMD必须返回一个allocation句柄,通常这个指针会指向驱动的私有数据结构,其中包含了allocation的信息。KMD会在任何调用DxgkCbGetHandleData获得handle相关的私有数据。因此KMD不需要维护一个私有的allocation句柄表。事实上,我们强烈不建议使用私有句柄表,因为这会显得易用性低,并且容易造成在显示mode切换时与DXGK中状态不一致,例如用户快速的切换mode,热插拔等等。

UMD为每个resource或device指定一个allocation。KMD能够检查是否Resource位被设置确定一个allocation是否属于一个resource,该位属于DXGKARG_CREATEALLOCATION类型pCreateAllocation的Flags成员。如果allocation属于一个resource,KMD能返回一个资源句柄(不是必须的),通常其中包含一个指向描述该资源的驱动私有数据。如果DXGK调用DxgkDdiCreateAllocation为一个已经存在的资源创建allocation,DXGKARG_CREATEALLOCATION的hResource成员会包含之前调用DxgkDdiCreateAllocation 时所返回的那个资源的allocation。如果有需要,KMD能够在两次调用DxgkDdiCreateAllocation之间改变资源句柄。

如果UMD在一个Command buffer中使用了一个resource句柄,KMD能够通过调用DxgkCbGetHandleData来获得相关的私有数据。KMD也能通过调用DxgkCbEnumHandleChildren够枚举所有的资源的子allocation。

从Win7开始,在为了GDI硬件加速时调用KMD的DxgkDdiCreateAllocation时,驱动应该设置allocation的大小pCreateAllocation->pAllocationInfo->Size(包括CPU可见allocation的pitch值)。

DxgkDdiCreateAllocation中创建得资源属于整个显卡而不是其中得device。KMD不应该在私有allocation或resource数据中引用device数据,因为UMD可能会在device数据销毁之后使用resource。

DxgkDdiCreateAllocation should be made pageable.

Allocating history buffers

从Win8.1开始,当DxgkDdiCreateAllocation被调用时,KMD能够设置DXGK_ALLOCATIONINFOFLAGS.HistoryBuffer来标识UMD能够管理创建和销毁的history buffer。

Requirements

  
Minimum supported clientAvailable in Windows Vista and later versions of the Windows operating systems.
Target PlatformDesktop
Headerd3dkmddi.h
IRQLPASSIVE_LEVEL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值