Freigeben über


DXGKDDI_SETVIDPNSOURCEADDRESS Rückruffunktion (d3dkmddi.h)

Die DxgkDdiSetVidPnSourceAddress-Funktion legt die Adresse der primären Oberfläche fest, die einer bestimmten Quelle für Videos zugeordnet ist.

Syntax

DXGKDDI_SETVIDPNSOURCEADDRESS DxgkddiSetvidpnsourceaddress;

NTSTATUS DxgkddiSetvidpnsourceaddress(
  IN_CONST_HANDLE hAdapter,
  IN_CONST_PDXGKARG_SETVIDPNSOURCEADDRESS pSetVidPnSourceAddress
)
{...}

Parameter

hAdapter

Ein Handle zu einem Kontextblock, der einem Anzeigeadapter zugeordnet ist. Der Display-Miniporttreiber hat dieses Handle zuvor dem DirectX-Grafik-Kernelsubsystem im MiniportDeviceContext Ausgabeparameter des DxgkDdiAddDevice--Funktion bereitgestellt.

pSetVidPnSourceAddress

Ein Zeiger auf eine DXGKARG_SETVIDPNSOURCEADDRESS Struktur, die Funktionsargumente enthält.

Rückgabewert

DxgkDdiSetVidPnSourceAddress gibt STATUS_SUCCESS zurück, wenn dies erfolgreich ist; andernfalls wird eine der in Ntstatus.hdefinierten Fehlercodes zurückgegeben.

Ab Windows 8 kann der Anzeigeminiporttreiber einen Aufruf von DxgkDdiSetVidPnSourceAddressnicht ausführen STATUS_INVALID_PARAMETER, wenn das SharedPrimaryTransition- element in pSetVidPnSourceAddress->Flagsfestgelegt ist. Ein solcher Fehler wird jedoch nicht erwartet, es sei denn, in der Implementierung des Benutzermodustreibers der CheckDirectFlipSupport Funktion oder im DWM ist ein Fehler aufgetreten. Wenn ein solcher Fehler auftritt, schlägt das Betriebssystem nicht nahtlos in den Kompositionsmodus zurück, und die Präsentation ist falsch.

Bemerkungen

DxgkDdiSetVidPnSourceAddress wird nur mit Primaren aufgerufen, die mit der aktuell zugesicherten Netzwerktopologie (VidPN) passen. Das D3DDDIFMT_A8R8G8B8-Format wird beispielsweise so festgelegt, dass es an einen VidPN angepasst wird, der auf ein D3DDDIFMT_X8R8G8B8 Format festgelegt ist und umgekehrt.

Das DirectX-Grafik-Kernelsubsystem ruft DxgkDdiSetVidPnSourceAddress auf, um den Anzeigemodus zu wechseln und speicherzuordnungen I/O (MMIO)-basierte Flip-Vorgänge auszuführen. Die Bitfeldkennzeichnungen im Flags Member der DXGKARG_SETVIDPNSOURCEADDRESS Struktur, auf die der pSetVidPnSourceAddress-Parameter verweist, gibt den Typ des auszuführenden Anzeigevorgangs an. Um den Anzeigemodus zu wechseln, legt das Grafikkernsubsystem den ContextCount Member von DXGKARG_SETVIDPNSOURCEADDRESS auf Null fest. In diesem Fall ist der Inhalt des Arrays, das das Context Member von DXGKARG_SETVIDPNSOURCEADDRESS angibt, nicht definiert. Zum Ausführen eines Flip-Vorgangs legt das Grafik-Kernel-Subsystem ContextCount auf die Anzahl der Kontexte und Context auf das Array von Treiberkontexthandles für die Kontexte fest, die zum Flip-Vorgang beitragen.

Wenn der zuvor angegebene Anzeige-Miniporttreiber in einem Aufruf der DxgkDdiQueryAdapterInfo-Funktion angezeigt wird, unterstützt ein MMIO-basiertes Flip (durch Festlegen der FlipOnVSyncMmIo Bitfeldflagge im FlipCaps Member der DXGK_DRIVERCAPS-Struktur auf TRUE), wird die DxgkDdiSetVidPnSourceAddress-Funktion des Treibers anschließend für Flip-Anforderungsebene (DIRQL) auf Geräteunterbruchanforderungsebene (DIRQL) aufgerufen. Die DxgkDdiSetVidPnSourceAddress-Funktion des Treibers muss den DAC programmieren und bei der folgenden vertikalen Synchronisierung mit der primären Oberfläche beginnen, deren Adresse im PrimaryAddress- Mitglied von DXGKARG_SETVIDPNSOURCEADDRESS angegeben ist. Der Treiber muss auch den DXGK_INTERRUPT_CRTC_VSYNC Interrupttyp im InterruptType Parameter in einem Aufruf der DxgkCbNotifyInterrupt Funktion übergeben, um die effektive Scanadresse zu melden. Der Treiber muss dem Aufruf von DxgkCbNotifyInterrupt mit einem Aufruf der DxgkCbNotifyDpc--Funktion folgen.

DxgkDdiSetVidPnSourceAddress- muss sich im nicht seitenfähigen Speicher befinden. DxgkDdiSetVidPnSourceAddress dürfen keinen Code aufrufen, der sich im ausgelagerten Speicher befindet und keine Daten bearbeiten darf, die sich im ausgelagerten Speicher befinden.

Clone-View Situationen

In Klonansichtssituationen sollte der Anzeige-Miniporttreiber Flip-Vorgänge entsprechend verarbeiten, wie in diesem Abschnitt beschrieben.

Wenn der DWM ausgeführt wird, wird das DirectX-Grafik-Kernel-Subsystem flip-synchronizes, wenn eine vertikale Synchronisierung auftritt. Das DirectX-Grafik-Kernelsubsystem kann jedoch nur synchronisiert werden, wenn eine vertikale Synchronisierung eines einzelnen Grafikadapterausgabesignals auftritt. Das DirectX-Grafik-Kernelsubsystem muss sofort alle anderen Grafikadapterausgabesignale kippen, um ein Abreißen zu vermeiden.

Der GPU-Scheduler erkennt eine einzelne vertikale Synchronisierung und bestimmt, dass die gekippte Oberfläche verfügbar ist, sobald der erste Monitor kippt. Daher wird der Miniporttreiber möglicherweise auf einer Oberfläche gerendert, die der zweite Monitor weiterhin anzeigt.

Videoanwendungen (z. B. Windows Media Player) kennen keine Klonansichtssituationen und erwarten, dass ein vorhersagbares vertikales Synchronisierungsintervall besteht. Wenn der GPU-Scheduler die vertikalen Synchronisierungen beider Monitore erkannt hat, wäre das vertikale Synchronisierungsintervall (und daher das Flip) unvorhersehbar und würde sich im Laufe der Zeit verdriften, was dazu führen würde, dass die DWM- und Videoanwendungen nicht ordnungsgemäß funktionieren.

Für Klonansichtssituationen muss der Miniporttreiber für den Display-Miniport eine vertikale Synchronisierung auf dem primären Monitor und einen MMIO-basierten unmittelbaren Flip auf dem sekundären Monitor ausführen.

Die dxgkDdiSetVidPnSourceAddress-Funktion des Anzeigeminiporttreibers sollte die Adresse aufzeichnen, auf die im Grafikadapterobjekt gekippt wird.

Damit der Anzeigeminiporttreiber nicht auf den nächsten vertikalen Retrace des sekundären Monitors wartet, legt das DirectX-Grafikkernsubsystem das FlipImmediate- Bitfeldflagge auf TRUE- in einem Aufruf der DxgkDdiSetVidPnSourceAddress-Funktion des Treibers fest.

Lesen Sie die Anforderungen zum Aufrufen dieser Funktion mit Mehrplanüberlagerungen in Multiplane-Overlay-VidPN-Präsentation.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista
Header- d3dkmddi.h
IRQL- PASSIVE_LEVEL. Wird bei DIRQL aufgerufen, wenn der Treiber ein MMIO-basiertes Flip unterstützt.

Siehe auch

DXGK_DRIVERCAPS

DXGKARG_SETVIDPNSOURCEADDRESS

DxgkCbNotifyDpc

DxgkCbNotifyInterrupt

DxgkDdiAddDevice-

DxgkDdiSetVidPnSourceVisibility

DxgkDdiQueryAdapterInfo