[directx]一个allocation的旅行

发布时间 2023-04-01 15:41:15作者: sunny,lee

在directX的世界里面,会有一个叫做allocationd的东西,平日里面,在app层,看到的都是createresource之后,有一个handle的存在,他其实对应了一整块gpu上面的memory。

首先, 分配allocation, 这个是在user mode call OS的 allocatecb去实现的,然后d3d runtime会去call KMD的gfx driver去实现。这个时候,UMD会去填D3DDDICB_ALLOCATE这个结构体,其实就是一些宽高还有格式的东西,但是因为GPU的硬件很复杂的,会在private的 data里面和KMD的driver去有一些更复杂的东西,比如pitch,tile还有更跟硬件相关的属性。这一下来,基本上分配的属性就确定了。这个allocation占用多大的byte,怎么摆。

然后map to GPU VA, 这个时候,他才对应了GPU里面的一块virtual address。

然后去make resident, 就可以真正的排队进paging queue, 等到自己的物理地址。在driver真正下cmd的时候,如果有对这一块surface/allocation的操作,就会需要等到这个paging queu的fence被触发,才可以去对这块地址操作。不然就会报page fault。