From: krish on
Hi,

I am trying to develop a WDDM based display driver or windows 7.I
am unable to know what need to be done in two of the calls namely

DxgkDdiEnumVidPnCofuncModality
DxgkDdiIsSupportedVidPn

I tried to add an initial vidpn topology by implementing the
DxgkDdiRecommendFunctionalVidPn call in the WDDM miniport driver.

But starting from windows 7 i am unable to get the
DxgkDdiRecommendFunctionalVidPn function call from dxgkrnl. After
searching through the MSDN documentation i found out that the function
is deprecated starting from windows 7.

msdn link: http://msdn.microsoft.com/en-us/library/ee220395.aspx

According to msdn

"On a computer running Windows 7, the display mode manager (DMM)
determines an appropriate VidPN topology to apply using VidPN history
data in the CCD database. DMM no longer determines the VidPN topology
based upon the last known good topology as it did in Windows Vista.
Consequently, on Windows 7 DMM never calls the
DxgkDdiRecommendVidPnTopology function."

If so then how to provide initial vidpn topology?
else how to add the vidpn topology in CCD persistent data base from
which the DMM determines the functional vidpn?

Else do we need to handle DxgkDdiEnumVidPnCofuncModality and
DxgkDdiIsSupportedVidPn in a special way?


I am unable to implement these two calls
DxgkDdiEnumVidPnCofuncModality and DxgkDdiIsSupportedVidPn

Please help me in this regard.

Thanks & Regards
Krish.


From: Ivan Brugiolo [MSFT] on
Why do you want to provide an VidPn initial network ?
If you provide the sources (and their changes) and the targets
(those do not change), then the System will pick a resolution
for you. This is the comment I added to a prototype
virtual WDDM 1.1 driver I was working on end-of-summer.
Be warned, EnumVidPnCofuncModality can be called a few thousands
times during PnP-start or machine boot.
The driver had 4 present-sources and 5 present-targets,
but only 3 were active. At the end they were showing up as 3 monitors
in desk.cpl.
The call sequence is only for the first path of the topology.
The other paths are not discussed for the sake of simplicity.

NTSTATUS
DxgkDdiEnumVidPnCofuncModality(
__in CONST HANDLE hAdapter,
__in CONST DXGKARG_ENUMVIDPNCOFUNCMODALITY* CONST
pEnumCofuncModalityArg
)
/*++

Routine description:

The Video-Present-Network manager associated with the Miniport
calls this function in order to make function-together `co-functional`
the video-present-modes that were associated with the supplied
video present network.
The supplied topology has some constrains, and those must not be
touched.
The outcome of this function is either some extra pinned mode
in the the mode-set for the sources or targets, or, some adjustment
on specific properties for sources or targets.

The process requires this function to be called multiple times.
A possible call sequence is:

Step 0 - Pivot = D3DKMDT_EPT_NOPIVOT
Paths: (0 <-> 0)
Source: N/A
Target: N/A

Step 1 - Pivot = D3DKMDT_EPT_NOPIVOT
Paths: (0 <-> 0)
(1 <-> 4)
Source: N/A
Target: N/A

Step 2 - Pivot = D3DKMDT_EPT_NOPIVOT
Paths: (0 <-> 0)
(1 <-> 4)
(2 <-> 3)
Source: N/A
Target: N/A

Step 3 - Pivot = D3DKMDT_EPT_VIDPNSOURCE
Paths: (0 <-> 0)
(1 <-> 4)
(2 <-> 3)
Source: (0 => 1024x768(a)A8R8G8B8)
Target: N/A

Step 4 - Pivot = D3DKMDT_EPT_VIDPNTARGET
Paths: (0 <-> 0)
(1 <-> 4)
(2 <-> 3)
Source: (0 => 1024x768(a)A8R8G8B8)
Target: (0 => 1024x768(a)75Hx)

Step 5 - Pivot = D3DKMDT_EPT_SCALING
Paths: (0 <-> 0) (IdentityScaling)
(1 <-> 4)
(2 <-> 3)
Source: (0 => 1024x768(a)A8R8G8B8)
Target: (0 => 1024x768(a)75Hz)

Step 6 - Pivot = D3DKMDT_EPT_ROTATION
Paths: (0 <-> 0) (IdentityScaling,UnRotated)
(1 <-> 4)
(2 <-> 3)
Source: (0 => 1024x768(a)A8R8G8B8)
Target: (0 => 1024x768(a)75Hz)


Basically, the Video-Present-Network manager adds pieces one-by-one
to the network (because paths are being added), and, for each path,
it keeps adding constrains (for example source modes).

--*/

--

--
This posting is provided "AS IS" with no warranties, and confers no rights.
Use of any included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm


"krish" <drvkrish99(a)gmail.com> wrote in message
news:e9d6f77e-62bf-49d5-a91d-e17fa1e5127e(a)v15g2000prn.googlegroups.com...
> Hi,
>
> I am trying to develop a WDDM based display driver or windows 7.I
> am unable to know what need to be done in two of the calls namely
>
> DxgkDdiEnumVidPnCofuncModality
> DxgkDdiIsSupportedVidPn
>
> I tried to add an initial vidpn topology by implementing the
> DxgkDdiRecommendFunctionalVidPn call in the WDDM miniport driver.
>
> But starting from windows 7 i am unable to get the
> DxgkDdiRecommendFunctionalVidPn function call from dxgkrnl. After
> searching through the MSDN documentation i found out that the function
> is deprecated starting from windows 7.
>
> msdn link: http://msdn.microsoft.com/en-us/library/ee220395.aspx
>
> According to msdn
>
> "On a computer running Windows 7, the display mode manager (DMM)
> determines an appropriate VidPN topology to apply using VidPN history
> data in the CCD database. DMM no longer determines the VidPN topology
> based upon the last known good topology as it did in Windows Vista.
> Consequently, on Windows 7 DMM never calls the
> DxgkDdiRecommendVidPnTopology function."
>
> If so then how to provide initial vidpn topology?
> else how to add the vidpn topology in CCD persistent data base from
> which the DMM determines the functional vidpn?
>
> Else do we need to handle DxgkDdiEnumVidPnCofuncModality and
> DxgkDdiIsSupportedVidPn in a special way?
>
>
> I am unable to implement these two calls
> DxgkDdiEnumVidPnCofuncModality and DxgkDdiIsSupportedVidPn
>
> Please help me in this regard.
>
> Thanks & Regards
> Krish.
>
>
From: Tim Roberts on
"Ivan Brugiolo [MSFT]" <ivanbrug(a)online.microsoft.com> wrote:
>
>Why do you want to provide an VidPn initial network ?

I'll take a stab at that. Because nowhere in the documentation does it say
whether or not the driver NEEDS to do so. I don't know whether you've
every read the "video present network" documentation from the point of view
of a relative newcomer, but it is as impenetrable as any technical document
I've ever read.

>If you provide the sources (and their changes) and the targets
>(those do not change), then the System will pick a resolution
>for you. This is the comment I added to a prototype
>virtual WDDM 1.1 driver I was working on end-of-summer.

Is there any possibility that the source for your driver will be released
to the huddled masses? There are no longer any good WDDM samples, and the
API is rather vast.
--
Tim Roberts, timr(a)probo.com
Providenza & Boekelheide, Inc.
From: krish on
On Dec 10, 11:20 am, Tim Roberts <t...(a)probo.com> wrote:
> "Ivan Brugiolo [MSFT]" <ivanb...(a)online.microsoft.com> wrote:
>
>
>
> >Why do you want to provide anVidPninitial network ?
>
> I'll take a stab at that.  Because nowhere in the documentation does it say
> whether or not thedriverNEEDS to do so.  I don't know whether you've
> every read the "video present network" documentation from the point of view
> of a relative newcomer, but it is as impenetrable as any technical document
> I've ever read.
>
> >If you provide the sources (and their changes) and the targets
> >(those do not change), then the System will pick a resolution
> >for you. This is the comment I added to a prototype
> >virtualWDDM1.1driverI was working on end-of-summer.
>
> Is there any possibility that the source for yourdriverwill be released
> to the huddled masses?  There are no longer any goodWDDMsamples, and the
> API is rather vast.
> --
> Tim Roberts, t...(a)probo.com
> Providenza & Boekelheide, Inc.

Hi,

first of all my sincere thanks to Mr.Ivan and Mr.Tim for their
responses.

> If you provide the sources (and their changes) and the targets
> (those do not change), then the System will pick a resolution
> for you.

Regarding the above do u mean to say we need to provide the no of
video present sources and targets(children) in the start device?

If so yes i had provided them in my start device.

else r u suggesting to provide the source mode sets and target mode
sets? if so where to provide can we do the same in
DxgkDdiEnumVidPnCofuncModality?

>This is the comment I added to a prototype
> virtualWDDM1.1driverI was working on end-of-summer.

Regarding ur Virtual WDDM 1.1 driver i am pretty interested to know
what u did? if possible can u please share the same? it will be very
helpfull for me to understand the WDDM frame

work.

> Thedriverhad 4 present-sources and 5 present-targets,
> but only 3 were active. At the end they were showing up as 3 monitors
> in desk.cpl.

So u had returned to OS saying that only 3 of the 5 targets were
connected.Hence only 3 monitors were seen in the desk.cpl? Now how did
u control which source will be mapped to which of

the active targets in the vidpn topology?

> The Video-Present-Network manager associated with the Miniport
> calls this function in order to make function-together `co-functional`
> the video-present-modes that were associated with the supplied
> video present network.

Here i am able traverse the paths present in the topology and provided
the source modes and target modes in DxgkDdiEnumVidPnCofuncModality?
but as i press extend the desktop to

this display i am getting unable to save Display settings error?

what is the importance of DxgkDdiIsSupportedVidPn ? how it should be
handled?

> The supplied topology has some constrains, and those must not be
> touched.

As per my understanding after going through MSDN documentation the
constraints are if a source or target is identified as the pivot of
the enumeration, the mode set for that source or

target must not change.

If i am wrong please rectify me? if any additional constraints are
there please explain?


> Step 0 - Pivot = D3DKMDT_EPT_NOPIVOT
> Paths: (0 <-> 0)
> Source: N/A
> Target: N/A
>
> Step 1 - Pivot = D3DKMDT_EPT_NOPIVOT
> Paths: (0 <-> 0)
> (1 <-> 4)
> Source: N/A
> Target: N/A
>
> Step 2 - Pivot = D3DKMDT_EPT_NOPIVOT
> Paths: (0 <-> 0)
> (1 <-> 4)
> (2 <-> 3)
> Source: N/A
> Target: N/A
>
> Step 3 - Pivot = D3DKMDT_EPT_VIDPNSOURCE
> Paths: (0 <-> 0)
> (1 <-> 4)
> (2 <-> 3)
> Source: (0 => 1024x768(a)A8R8G8B8)
> Target: N/A


As per ur above mentioned calling sequence each time
DxgkDdiEnumVidPnCofuncModality will be called first with only one
path (0 <-> 0) , second time with two paths (0 <-> 0), (1 <-> 4) and
so on with enum pivot as nopivot , how the OS knows that source id o
is mapped to target id 0 and 1 is mapped to 4?


In between in my analysis i saw DxgkDdiIsSupportedVidPn is called
before calling DxgkDdiEnumVidPnCofuncModality ? what is the need do
we need to return that the constraining vidpn is supported in
DxgkDdiIsSupportedVidPn ?

Alright by now u might have been fed up by my queries ? i will stop
here

please help me i am very much confused with these things and i am
unable to find any help in this regard. It seems only WDK
documentation is the only source of information i found till now which
is not in detail.

Thanks & Regards,
Krish.
From: Ivan Brugiolo [MSFT] on
I cannot speak on the record, [also because I no longer
work in desktop/graphics related technologies], but, there
was some talk around releasing a sample WDDM driver
based on the SoftPCI simulation framework,
once that sample would have been migrated to D3D10-11/WDDM1.1.

The general problem with releasing sources of WDDM drivers,
is the difference between WDDM 1.0 and 1.1 and the still
missing or incomplete features from DX9/DX10/DX11 both
in kernel and user mode. Many folks would have want that
the DX9 implementation based on WDDM 1.0 would never have existed.
But, at the time Vista released, there was not enough
commodity DX10 hardware available in the market.
Moreover DXGI/DX10/DX11 does not have DXVA2 support, and,
providing a long-term good example for all technologies
is largely complex exercise.


--
This posting is provided "AS IS" with no warranties, and confers no rights.
Use of any included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm


"Tim Roberts" <timr(a)probo.com> wrote in message
news:3k41i51t1ugeb38ae5pqsni87pj88n1ovb(a)4ax.com...
> "Ivan Brugiolo [MSFT]" <ivanbrug(a)online.microsoft.com> wrote:
>>
>>Why do you want to provide an VidPn initial network ?
>
> I'll take a stab at that. Because nowhere in the documentation does it
> say
> whether or not the driver NEEDS to do so. I don't know whether you've
> every read the "video present network" documentation from the point of
> view
> of a relative newcomer, but it is as impenetrable as any technical
> document
> I've ever read.
>
>>If you provide the sources (and their changes) and the targets
>>(those do not change), then the System will pick a resolution
>>for you. This is the comment I added to a prototype
>>virtual WDDM 1.1 driver I was working on end-of-summer.
>
> Is there any possibility that the source for your driver will be released
> to the huddled masses? There are no longer any good WDDM samples, and the
> API is rather vast.
> --
> Tim Roberts, timr(a)probo.com
> Providenza & Boekelheide, Inc.