VidPN Objects and Interfaces (MSDN翻译)

VidPN Objects and Interfaces

VidPN管理器使用VidPN对象来维护源和目标及显示模式之间的信息。

VidPN object

VidPN对象包含下面的子对象

  • Topology

  • Source mode set

  • Target mode set

  • Monitor source mode set

  • Monitor frequency range set

  • Monitor descriptor set

  • Path

  • Source

  • Target

  • Source mode

  • Target mode

  • Monitor source mode

下图显示了VidPN对象和子对象

diagram illustrating a vidpn object and its sub-objects

上图显示了显示了一对一,一对多,多对一,多对多的关系。例如,一个source可以属于一个或多个path,但是一个target只能属于一个path.

蓝色对象只能通过句柄和接口访问,灰色对象通过结构体指针访问。这里说的接口是包含函数指针的结构体。例如,DXGK_VIDPNTOPOLOGY_INTERFACE 结构体包含了miniport驱动来检查改变VidPN Topology对象的指针。当miniport驱动调用其中任何一个方法时,都需要提供指向topology对象的句柄。下面表格列出了用来访问VidPN对象或子对象的句柄,接口,和指针类型。

ObjectAccess method and data type

VidPN (VidPN Interface)

Accessed through handle and interface.

D3DKMDT_HVIDPN

DXGK_VIDPN_INTERFACE

Topology (VidPN Topology Interface)

Accessed through handle and interface.

D3DKMDT_HVIDPNTOPOLOGY

DXGK_VIDPNTOPOLOGY_INTERFACE

Source mode set (VidPN Source Mode Set Interface)

Accessed through handle and interface.

D3DKMDT_HVIDPNSOURCEMODESET

DXGK_VIDPNSOURCEMODESET_INTERFACE

Target mode set (VidPN Target Mode Set Interface)

Accessed through handle and interface.

D3DKMDT_HVIDPNTARGETMODESET

DXGK_VIDPNTARGETMODESET_INTERFACE

Monitor source mode set

Accessed through handle and interface.

D3DKMDT_HMONITORSOURCEMODESET

DXGK_MONITORSOURCEMODESET_INTERFACE

Path

Accessed through structure pointer.

D3DKMDT_VIDPN_PRESENT_PATH

Source

Accessed through structure pointer.

D3DKMDT_VIDEO_PRESENT_SOURCE

Target

Accessed through structure pointer.

D3DKMDT_VIDEO_PRESENT_TARGET

Source mode

Accessed through structure pointer.

D3DKMDT_VIDPN_SOURCE_MODE

Target mode

Accessed through structure pointer.

D3DKMDT_VIDPN_TARGET_MODE

Monitor source mode

Accessed through structure pointer.

D3DKMDT_MONITOR_SOURCE_MODE

Monitor frequency range set

Accessed through structure pointer.

[DXGK_MONITORFREQUENCYRANGESET_INTERFACE ](https://docs.microsoft.com/windows-hardware/drivers/ddi/content/d3dkmddi/ns-d3dkmddi-_dxgk_monitorfrequencyrangeset_interface)

Monitor descriptor set

Accessed through structure pointer.

[DXGK_MONITORDESCRIPTORSET_INTERFACE](https://docs.microsoft.com/windows-hardware/drivers/ddi/content/d3dkmddi/ns-d3dkmddi-_dxgk_monitordescriptorset_interface)

 

VidPN Manager

VidPN管理器是DXGK子系统的一个组件,与miniport驱动一起写作完成创建和维护VidPN的工作。下面步骤描述了miniport驱动获得VidPN句柄和接口的过程。

1.初始化时Dxgk子系统调用miniport驱动的DxgkDdiStartDevice方法。参数中提供了DXGKRNL_INTERFACE结构体,其中包含Dxgk子系统中实现的方法。其中一个是DxgkCbQueryVidPnInterface。

2.某些时候VidPN管理器需要miniport驱动的功能,并会在一些方法调用时将指向VidPN对象的句柄传递给miniport驱动。

3.miniport驱动会将获得的句柄传递给DxgkCbQueryVidPnInterface,该函数返回一个DXGK_VIDPN_INTERFACE结构体。

在miniport驱动拥有指向VidPN对象的接口和句柄以后,miniport驱动就能得到指向基本子对象(topology, source mode set, target mode set, monitor source mode set)的句柄和接口。例如miniport driver 能调用pfnGetTopology(VidPN接口中的方法)来得到指向VidPN topology对象的句柄和一个指向DXGK_VIDPNTOPOLOGY_INTERFACE结构体的指针。

下面的方法(VidPN接口中的方法)能够获得指向VidPN基础子对象的句柄和接口。

注意下面两个方法需要在使用完SourceModeSet和TargetModeSet之后调用

同样,在获得基础子对象的句柄和接口之后能够调用接口中的方法得到子对象的描述符。例如已经得到topology的句柄和接口之后,miniport驱动能够通过下列步骤获得topology中的所有path描述符。

1.VidPN Topology interface

    调用topology接口中的pfnAcquireFirstPathInfo方法能够获得D3DKMDT_VIDPN_PRESENT_PATH结构体指针,这个指针描述了topology中的第一个path。

2.VidPN Topology interface

    重复调用pfnAcuireNextPathInfo可以获取topology中的其他path。

类似的,miniport驱动能够调用pfnAcquireFirstModeInfo和pfnAcquireNextModeInfo得到Mode set描述符。

注意没有方法能够移除DXGK_VIDPNSOURCEMODESET_INTERFACE这个接口。当miniport驱动需要更新一个source mode 时,驱动不应该通过添加和移除一个mode来改变一个mode set,相应的应该创建一个新的mode set来替换旧的mode set。例如DxgkDdiEnumVidPnCofuncModality函数在调用的时候旧一定会更新mode set。下面的步骤描述了更新source mode set:

1. 调用DXGK_VIDPNSOURCEMODESET_INTERFACE中的pfnCreateNewModeInfo方法得到指向 D3DKMDT_VIDPN_SOURCE_MODE结构体的指针。重复调用pfnAddMode来添加source mode set。

2. 调用 DXGK_VIDPN_INTERFACE中的 pfnAssignSourceModeSet 方法给指定的video present source添加一个新mode set。这个新的source mode set会替换当前source的mode set。

 

更新target mode set和更新source mode set 类似DXGK_VIDPNTARGETMODESET_INTERFACE 接口有一下方法:

VidPN Target Mode Set interface

pfnCreateNewModeInfo 方法创建一个新的target mode set以及使用 pfnAddMode方法添加一个新的mode。

没有一个方法能获得指定path所使用的source和target。miniport驱动能够通过D3DKMDT_VIDPN_PRESENT_PATH 中的VidPnSourceId和VidPnTargetId确定source和target属于哪一个path。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ports和Interfaces是FPGA设计中两个非常重要的概念,它们用于在不同的模块之间传递数据和控制信号。 在FPGA设计中,我们可以使用Verilog或VHDL语言来定义Ports和Interfaces。以下是一个简单的例子,展示了如何定义Ports和Interfaces: Verilog: ```verilog module example ( input clk, input reset, input [7:0] data_in, output [7:0] data_out ); // module implementation goes here endmodule ``` VHDL: ```vhdl entity example is port ( clk : in std_logic; reset : in std_logic; data_in : in std_logic_vector(7 downto 0); data_out : out std_logic_vector(7 downto 0) ); end entity; architecture rtl of example is begin -- architecture implementation goes here end architecture; ``` 在上面的代码中,我们定义了四个Ports:`clk`、`reset`、`data_in`和`data_out`。其中`clk`和`reset`是控制信号,`data_in`和`data_out`是数据信号。这些Ports可以通过模块的输入和输出来连接到其他模块。 另外,我们还可以定义Interfaces,以传递更复杂的数据结构。以下是一个使用AXI接口的例子: Verilog: ```verilog module example ( input axi_clk, input axi_resetn, input axi_arvalid, input [31:0] axi_araddr, output axi_arready, input axi_rready, output axi_rvalid, output [31:0] axi_rdata ); // module implementation goes here endmodule ``` VHDL: ```vhdl entity example is port ( axi_clk : in std_logic; axi_resetn : in std_logic; axi_arvalid : in std_logic; axi_araddr : in std_logic_vector(31 downto 0); axi_arready : out std_logic; axi_rready : in std_logic; axi_rvalid : out std_logic; axi_rdata : out std_logic_vector(31 downto 0) ); end entity; architecture rtl of example is begin -- architecture implementation goes here end architecture; ``` 在上面的代码中,我们定义了一个AXI接口,包括了控制信号和数据信号。这些信号可以用于与其他模块进行通信,以实现更复杂的功能。 在FPGA设计中,正确地定义和配置Ports和Interfaces非常重要,因为它们直接影响到模块之间的数据和控制信号传递,进而影响整个系统的功能和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值