![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
WDDM
文章平均质量分 59
小鲤鱼与绿
小鲤鱼与绿的技术分享,欢迎热爱技术的朋友一起来学习
展开
-
Connection and configuring display(MSDN 翻译)
使用CCD API来建立Desktop Display, 硬件厂商必须修改WDDM的moniport driver来支持CCD。显示控制面板,快捷键,以及HDP管理器都是用CCD API。OEM也可以采用CCD API来替代原有的Escape调用。Connection and Configuring Display(CCD)是用来提供关于控制桌面显示的一系列API.CCD系列接口不使用GDI相关的概念,而是采用WDDM相关的概念,例如Adapter, Source, Target.翻译 2024-06-23 23:00:51 · 19 阅读 · 0 评论 -
Enumerating Child Devices of a Display Adapter(MSDN翻译)
Enumerating Child Devices of a Display Adapter下列流程描述了端口驱动,小端口驱动和VidPN管理器在初始化时如何协作完成显卡子设备的枚举。 端口驱动调用KMD的DxgkDdiStartDevice函数, DxgkDdiStartDevice返回显卡子设备的数量(在NumberOfChildren参数中)。DxgkDdiStartDevice也...翻译 2019-10-15 23:44:48 · 254 阅读 · 0 评论 -
Monitor Hot Plug Detection(MSDN翻译)
Monitor Hot Plug Detection显卡上的Video output被看作是显卡的一个子设备。而monitor或者其他连接到output上的外部显示设备不会当作一个子设备。在初始化时,KMD的DxgkDdiQueryChildRelations函数给每个子设备指定一个类型和HPD awareness值。类型是DXGK_CHILD_DEVICE_TYPE枚举中的一个值。 T...翻译 2019-10-22 00:50:44 · 601 阅读 · 0 评论 -
Monitor Class Function Driver(MSDN翻译)
Monitor Class Function Driver每个显卡上的Video output连接的一个monitor表示为一个设备节点,这个节点为显卡设备的子设备节点。典型地,设备栈中只有两个设备对象(video output, monitor)成对出现:物理设备对象(PDO)和功能设备对象(FDO)。有时,FDO之上也会有Filter 设备对象,其关联三方提供地filter 驱动,对于...翻译 2019-09-16 00:38:43 · 300 阅读 · 0 评论 -
Splitting a DMA Buffer(MSDN翻译)
Splitting a DMA Buffer分割点被VMM用来将KMD提交的大型操作项分割成更小的操作项,使需要执行的GPU资源变少。例如,大的DMA buffer会引用一系列Allocation,而本地显存或共享内存无法满足需求。只有将该操作项分成多个更小的操作项,以降低对GPU资源的需求。Note DMA buffer分割 和 DMA Buffer抢占使两个独立的不同概念。KMD必...翻译 2019-09-15 21:23:33 · 223 阅读 · 1 评论 -
Submitting a Command Buffer(MSDN翻译)
Submitting a Command Buffer要在Vista的图形栈中传递Command buffer需要进行如下操作。 如果D3D RT调用下列任一UMD函数来执行指定的操作,则UMD会开始提交Command buffer。 Present-显示图形. Flush- 提交硬件指令. Lock- lock在当前指令块中使用的一个资源。 Note 另外UMD总...翻译 2019-09-13 17:40:35 · 326 阅读 · 0 评论 -
Paging Video Memory Resources(MSDN翻译)
Paging Video Memory Resources不同于Win2000的显示驱动模型,Vista的显示驱动模型允许实际被创建的显示内存资源大于物理可用的显示内存总量,即图形内存能够被Page in 和Page out。因此,并不是所有的的显示内存会同时存在于显存中。GPU能在其管线中拥有多个DMA buffer。而active的DMA buffer中引用的显存资源必须存在于显存之中...翻译 2019-09-13 02:45:40 · 215 阅读 · 0 评论 -
Using the Guaranteed Contract DMA Buffer Model(MSDN翻译)
Using the Guaranteed Contract DMA Buffer ModelWindows Vista的显示驱动模型会保障(Guarantee)用于渲染设备的DMA Buffer和patch-location list的大小。在受保障的contract模型中,UMD能知道DMA Buffer和patch-location list的大小,当UMD填充Command buff...翻译 2019-09-13 01:27:37 · 187 阅读 · 0 评论 -
Introduction to Command and DMA Buffers(MSDN翻译)
Introduction to Command and DMA BuffersCommand buffer和DMA buffer很类似。但是Command buffer是UMD使用的,DMA buffer是KMD使用的。Command buffer有如下特性: 不能被GPU直接访问。 内容格式由硬件厂商制定。 其内存分配在渲染应用进程的私有地址空间中,该内存为为普...翻译 2019-09-13 00:56:05 · 250 阅读 · 0 评论 -
Retrieving Graphics Memory Numbers(MSDN翻译)
Retrieving Graphics Memory Numbers创建图形程序的开发者可以从Vista开始调用DX10的API得到支持WDDM显卡驱动系统中精确的可用的显存大小。下面显示了获得显存大小的步骤: 因为现存的精确大小仅在支持WDDM的显卡驱动的系统中有效,因此程序需要先调用如下接口确认该系统支持WDDM。: HasWDDMDriver(){ LPDIRE...转载 2019-09-13 00:01:48 · 140 阅读 · 0 评论 -
Examples of Graphics Memory Reporting(MSDN翻译)
Examples of Graphics Memory Reporting下面的例子对比了不同的显卡和内存配置在Vista和XP上的数值报告差异。均使用Display程序和WinSAT来查看可用内存报告。Example 1: 256-MB Dedicated On-board Graphics Memory on a Desktop下面的截图显示了桌面系统上ATI独立显卡拥有256M...翻译 2019-09-12 23:24:41 · 145 阅读 · 0 评论 -
Calculating Graphics Memory(MSDN翻译)
Calculating Graphics MemoryVMM需要在上报精确的显存信息之前计算显存的总量。下列描述了VMM如何计算显存数量:Total system memory系统内存总大小系统内存总量是系统OS可以访问的内存部分。BIOS分配使用的内存不会计算在系统内存总大小中。例如,系统中由1G(1024MB)内存条,BIOS分配使用了1MB,则OS能访问的内存只有1023MB。...翻译 2019-09-10 01:49:08 · 483 阅读 · 0 评论 -
Reporting Graphics Memory(MSDN翻译)
Reporting Graphics MemoryVMM向用户提供的内存信息是由显卡驱动提供的。在Vista之前的OS在显示面板application中以一个数值来显示显存数量。看卡驱动提供这个数值;OS得这个数值并将其呈现在显示面板中。WDDM版本的VMM会报告一个详细的项目信息, 其中包含每个显存提供组件。下列组件会使用这个报告信息。 WinSAT通过检测可用的显存数量来决定...翻译 2019-09-10 00:49:42 · 160 阅读 · 0 评论 -
Patching a DMA Buffer(MSDN翻译)
Patching a DMA Buffer当DMA buffer中每个内存资源被定位之后,会VMM被通知,GPU Scheduler调用KMD的DxgkDdiPatch函数来patch物理地址给资源资源(即,给资源指定一个物理地址)。...翻译 2019-09-15 21:29:57 · 138 阅读 · 0 评论 -
Preparing DMA Buffers(MSDN翻译)
Preparing DMA BuffersKMD必须及时准备好DMA buffer。当GPU执行一个DMA buffer时,KMD通常会被调用来准备下一个DMA buffer用于提交。为了避免GPU处于饥饿状态,KMD用于准备和提交后续DMA buffer的时间应该少于GPU执行当前DMA buffer的时间。...翻译 2019-09-15 21:35:50 · 104 阅读 · 0 评论 -
Requesting to Rename an Allocation(MSDN翻译)
Requesting to Rename an Allocation当应用指出需要丢弃这个作为请求锁定的surface的一部分内容(例如, Vertex buffer),UMD应该请求VMM重命名关联surface的allocation。D3D RT用Discard位表示该surface的内容不再被使用。驱动能够在当前的保存有surface内存的allocation为busy时,请求VMM分配...翻译 2019-09-15 22:41:22 · 140 阅读 · 0 评论 -
Specifying Memory Type for a Resource(MSDN翻译)
Specifying Memory Type for a Resource当UMD收到创建surface资源请求的时候需要使用收到关于内存内存类型的信息。内存类型可以通过D3DDDIPOOL_SYSTEMMEM或D3DDDIPOOL_VIDEOMEMORY指定为系统内存或者显存,该信息在D3DDDIARG_CREATERESOURCE的Pool成员中。另外MSFT D3D RT在Pool中了给...翻译 2019-09-24 00:32:21 · 155 阅读 · 0 评论 -
Supplying Fence Identifiers(MSDN翻译)
Supplying Fence IdentifiersDXGK在调用KMD的DxgkDdiPatch和DxgkDdiSubmitCommand函数时会在参数DXGKARG_PATCH和DXGKARG_SUBMITCOMMAND的SubmissionFenceId成员中给出唯一的Fence ID。根据显卡硬件的具体实现,KMD会因为如下原因使用DxgkDdiPatch或DxgkDdiSubmit...翻译 2019-09-23 23:03:29 · 203 阅读 · 0 评论 -
Windows Display Driver Model (WDDM) Operation Flow(MSDN翻译)
Windows Display Driver Model (WDDM) Operation Flow下图显示了WDDM从渲染设备的创建到内容被显示的流程。Creating a Rendering Device 1. 在应用程序请求创建渲染设备之后,KMD会收到DxgkDdiCreateDevice调用DxgkDdiCreateDevice调用。KMD会初...翻译 2019-09-23 22:41:52 · 939 阅读 · 0 评论 -
Requesting and Using Surface Memory(MSDN翻译)
Requesting and Using Surface Memory当MSFT D3D RT请求创建surface列表时,会调用UMD的CreateResource函数。UMD使用D3D RT指定的指向surface列表的资源句柄回调给D3D RT。UMD创建了资源对象代表surface列表的句柄并保证该句柄和这个列表一一对应,并返回句柄给D3D RT。RT使用这个唯一的句柄在随后的驱动调用...翻译 2019-09-19 00:41:12 · 158 阅读 · 0 评论 -
Tasks in the Windows Display Driver Model (WDDM)(MSDN翻译)
Tasks in the Windows Display Driver Model (WDDM)下面主题讨论了如何使用WDDM执行的任务。Requesting and Using Surface MemorySpecifying Memory Type for a ResourceLocking MemoryLocking Swizzled AllocationsManip...翻译 2019-09-18 20:47:39 · 213 阅读 · 0 评论 -
GPU preemption(MSDN翻译)
GPU preemption一种新的GPU 抢占模型从Windows 8开始使用。在这种模型下OS不在允许禁用用于抢占的GPU DMA(direct memory access)包,即保障了在TDR(Timeout Detection and Recovery)过程开始之前抢占请求会被发送到GPU。Minimum Windows Display Driver Model (WDDM) ve...翻译 2019-09-18 01:14:21 · 1003 阅读 · 0 评论 -
Monitor Filter Drivers(MSDN翻译)
Monitor Filter DriversMSFT提供了通用的monitor类功能驱动,Monitor.sys,其处理了大多数monitor相关的任务。monitor厂商提供驱动不是必须的,除非厂商希望提供超越Monitor.sys的功能。如果monitor厂商选择提供了filter驱动,这个驱动表示为功能设备对象之上驱动对象。驱动对象处理用户模式application发出请求,该app...翻译 2019-09-16 00:54:32 · 281 阅读 · 0 评论 -
Monitor Drivers(MSDN翻译)
Monitor Drivers每个monitor有一个包含MSFT monitor class function驱动的设备栈,另外也可能包含一个第三方提供的filter 驱动。下列是关于monitor的function驱动和filter驱动的主题:Monitor Class Function DriverMonitor Filter Drivers...翻译 2019-09-15 22:57:25 · 229 阅读 · 0 评论 -
AGP Aperture (翻译)
应该在BIOS中分配多大AGP-Aperture?首先AGP-Aperture 内存只会在显存快使用完的时候才会被使用。通常不会游戏体验,因为游戏开发者会尽力不让使用的显存超过限制。系统中显存越大,AGP-Aperture就应该分配的越小。但是近期的游戏对纹理内存的需求越来越大,128MB的AGP-Aperture内存大小对于显存为64MB~256MB现存的显卡将会是一个合适的值(该文档比较旧,...翻译 2019-09-09 01:21:49 · 953 阅读 · 0 评论 -
Specifying Segments When Creating Allocations(MSDN翻译)
Specifying Segments When Creating Allocations显卡驱动指定并返回关于显卡内存段的有关信息,VMM会在调用DxgkDdiCreateAllocation时使用这些信息。在DxgkDdiCreateAllocation中显卡驱动创建Allocation作为视频资源。显卡驱动在描述Allocation的DXGK_ALLOCATIONINFO中返回所支持段的...翻译 2019-09-08 22:41:16 · 131 阅读 · 0 评论 -
Linked display adapter(MSDN翻译)
Linked display adapter每一个在LDA(linked display adapter)上的物理适配器都能支持GpuMmu或IoMmu或这两种寻址模式分别支持。IoMmu support每一个在LDA(linked display adapter)上的物理适配器都能支持GpuMmu或IoMmu或这两种寻址模式分别支持。DxgkDdiCreateDevice 将调用...翻译 2018-08-08 00:45:26 · 346 阅读 · 0 评论 -
Tile resources(MSDN翻译)
Tile resources对于Tile资源,依靠运行设备分页队列的异步VMM服务是不够的。特别是对于Tile资源想让页表刷新操作和渲染操作一起排队,这样确保了更新操作能够在绘制渲染操作之间同步应用。例如,被一个应用程序调用的下面的API序列1.Draw #422.Update tile mapping3.Draw #43我们想确保Draw #42在旧的页表状态下执行,而D...翻译 2018-08-08 00:25:06 · 420 阅读 · 0 评论 -
Context allocation(MSDN翻译)
Context allocation为给一个上下文的保留区域分配内存,KMD能够通过 DxgkCbCreateContextAllocation使用Context的Allocation。一些新功能被添加到上下文Allocation中,能够让这些Allocation能够适合新的GPU VA模型。AccessedPhysically一个上下文Allocation能够被指定为Accessed...翻译 2018-08-12 01:51:35 · 264 阅读 · 0 评论 -
Support for 64KB pages(MSDN翻译)
Support for 64KB pages为了支持64KB的页面,WDDM v2提供了两种类型的叶页表。一种支持4KB的页表项,另一种支持64KB的页表项。这两种页表的都覆盖了同样的虚拟地址范围,所以一个支持4KB页面的页表拥有的页表项数量是一个支持64KB页面的页表的16倍。64KB页面页表的大小被定义在DXGK_GPUMMUCAPS::LeafPageTableSizeFor64KP...翻译 2018-08-12 00:31:02 · 416 阅读 · 0 评论 -
Device paging queues(MSDN翻译)
Device paging queues被VMM暴露的各种服务会花掉不少时间来完成。例如要让一个Allocation resident,可能涉及到从页文件中传输获得Allocation中一些长时间不用的内容。保留GPU VA或者映射VA到一个已经resident的allocation来说并不需要太多时间,但是也涉及页表立即的操作,这个操作就需要在分页引擎中排队(queue onto pagin...翻译 2018-08-02 04:03:18 · 315 阅读 · 0 评论 -
System paging process(MSDN翻译)
System paging process大多数的分页操作都出现在系统分页进程(system paging process)上下文中。唯一的例外UpdateGpuVirtualAddress callback回调来更新的页表,UpdateGpuVIrtualAddress在一个特殊的companion上下文中并与渲染操作同步出现。Microsoft DirectX graphics ker...翻译 2018-08-02 03:14:31 · 420 阅读 · 1 评论 -
Driver protection(MSDN翻译)
Driver protection与每个VA一起,VMM允许独立硬件提供商(IHVs)来定义与特殊VA相关联的驱动/硬件保护(i.e. 页表项编码)。可以把驱动保护看作是页表项中的额外的位,而这些内容对于VMM是不可知的,而对于驱动需要对其进行控制并且能够让GPU用最佳的方式来访问。NOTE:驱动保护是可选的,在任何不需要该功能的平台上可以被设置为0。当映射或预留一段GPUVA范围时,...翻译 2018-08-05 22:47:13 · 381 阅读 · 0 评论 -
Pre-process GPU virtual address spaces (MSDN翻译)
Pre-process GPU virtual address spaces每一个进程都关联了两个GPU VA空间,一个应用程序GPU VA空间和一个特权GPU VA空间。Application GPU virtual address space 应用程序GPUVA空间应用程序GPUVA空间,也就是CB(Command Buffer)所执行的地址空间。CB由UMD创建。这个地址空间被U...翻译 2018-08-01 02:03:10 · 455 阅读 · 0 评论 -
GPU segments(MSDN翻译)
GPU segmentsGPU 通过DDI访问物理内存的过程被抽象成了段模型Segmentation model(PS: Segment都是从GPU怎么访问物理内存的角度来进行讨论的)。KMD通过给出一系列的Segment给GPU,以便GPU能够通过Segment使用对应的物理内存资源。Segment受到VMM的管理。WDDM v2一共有三种段类型: 内存段 Memory Segme...翻译 2018-07-28 04:05:52 · 746 阅读 · 0 评论 -
GPU virtual address(MSDN 翻译)
GPU virtual addressGPU VA在DDI层次上被逻辑上分成4KB或64KB一页进行管理。这就允许GPUVA能引用系统内存(System Memory)或内存段(Memory Segment)。系统内存粒度为4KB,内存段可以为4KB,也可以为64KB。视屏内存管理器(Video Memory Manager)支持多级虚拟地址翻译模式。这种模式采用了多级页表来翻译虚拟地址。...翻译 2018-08-01 00:59:00 · 1279 阅读 · 0 评论 -
GpuMmu Model (MSDN翻译)
GpuMmu mode在GpuMmu模式中,GPU拥有自己的内存管理单元(Mmu),Mmu能够将每个进程使用的GPU VA翻译成物理地址。每个进程拥有独立的CPUVA和GPUVA地址空间,并分别使用相应的页表。VMM管理者所有进程的GPUVA空间,并且负责分配,增长,更新,保证residency和释放页表。这个硬件格式的页表被GPU MMU使用,对于VMM是无意义的,并且再通过DDI传递时...翻译 2018-07-27 00:09:22 · 1180 阅读 · 2 评论 -
Resizable BAR support(MSDN翻译)
Resizable BAR support现在典型的独立GPU都只有Frame Buffer的一小部分被暴露在PCI总线上。为了和32位操作系统兼容,独立GPU都声明了一段256M的区域用于GPU的FrameBuffer并且固件也是这样设置的。对于WDDM v2,Windows将在固件初始化之后来重新协商GPU BAR的大小,这就支持了GPU的大小可变BAR特性。 Resizable BA...翻译 2018-08-08 01:07:47 · 2754 阅读 · 0 评论 -
GpuMmu Example Scenarios(MSDN翻译)
GpuMmu Example Scenarios这里列出了更新页表项映射属于一个进程P的Allocation到物理内存的一系列的操作。这里假设页表资源已经resident在GPU的内存段中了。1.VMM为进程P的根页表资源分配一段在换页进程上下文的虚拟地址。2.VMM为进程P的页表资源分配一段在换页进程上下文的虚拟地址。3.VMM调用 DxgkDdiBuildPagingBuffe...翻译 2018-08-13 00:11:20 · 340 阅读 · 0 评论 -
CPU host aperture(MSDN翻译)
CPU host aperture对于32位的独立GPU,其并不支持大小可变的BAR,当改变Frame Buffer BAR的大小时会失败。WDDM v2将提供一种替代机制,通过这种机制独立GPU的VRAM也能够被有效的访问。而对于支持可编程BAR地址空间的GPU,一种新的CPU Host Aperture功能被引入到WDDM v2中,进一步的抽象了这个特性。暴露一个CPU host ap...翻译 2018-08-09 00:30:50 · 749 阅读 · 0 评论