DXGKDDI_SETVIDPNSOURCEADDRESS Rückruffunktion (d3dkmddi.h)

Die DxgkDdiSetVidPnSourceAddress-Funktion legt die Adresse der primären Oberfläche fest, die einer bestimmten Videoquelle zugeordnet ist.

Syntax

DXGKDDI_SETVIDPNSOURCEADDRESS DxgkddiSetvidpnsourceaddress;

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

Parameter

hAdapter

Ein Handle für einen Kontextblock, der einer Grafikkarte zugeordnet ist. Der Anzeige-Miniporttreiber hat dieses Handle zuvor für das DirectX-Grafikkernsubsystem im Ausgabeparameter MiniportDeviceContext der DxgkDdiAddDevice-Funktion bereitgestellt.

pSetVidPnSourceAddress

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

Rückgabewert

DxgkDdiSetVidPnSourceAddress gibt bei Erfolg STATUS_SUCCESS zurück. Andernfalls wird einer der in "Ntstatus.h" definierten Fehlercodes zurückgegeben.

Ab Windows 8 kann der Anzeige-Miniporttreiber einen Aufruf von DxgkDdiSetVidPnSourceAddress fehlschlagen und STATUS_INVALID_PARAMETER zurückgeben, wenn das SharedPrimaryTransition-Element in pSetVidPnSourceAddress-Flags> festgelegt ist. Ein solcher Fehler ist jedoch nicht zu erwarten, es sei denn, es liegt ein Fehler in der Implementierung des Benutzermodustreibers der CheckDirectFlipSupport-Funktion oder in der DWM vor. Wenn ein solcher Fehler auftritt, führt das Betriebssystem kein nahtloses Failback in den Kompositionsmodus durch, und die Darstellung ist falsch.

Hinweise

DxgkDdiSetVidPnSourceAddress wird nur mit Primaries aufgerufen, die zur aktuell committeten VidPN-Topologie (Video Present Network) passen. Beispielsweise wird das D3DDDIFMT_A8R8G8B8 Format so bestimmt, dass es mit einem VidPN-Wert passt, der in ein D3DDDIFMT_X8R8G8B8-Format committet wird und umgekehrt.

Das DirectX-Grafikkernsubsystem ruft DxgkDdiSetVidPnSourceAddress auf, um den Anzeigemodus zu wechseln und auf dem Speicher zugeordnete E/A-Vorgänge (MMIO) auszuführen. Die Bitfeldflags im Flags-Member der DXGKARG_SETVIDPNSOURCEADDRESS-Struktur , auf die der pSetVidPnSourceAddress-Parameter verweist, geben den Typ des auszuführenden Anzeigevorgangs an. Um den Anzeigemodus zu wechseln, legt das Grafikkernsubsystem das ContextCount-Element von DXGKARG_SETVIDPNSOURCEADDRESS auf 0 (null) fest. In diesem Fall ist der Inhalt des Arrays, den der Kontextmember von DXGKARG_SETVIDPNSOURCEADDRESS angibt, nicht definiert. Um einen Flip-Vorgang auszuführen, legt das Grafikkernsubsystem ContextCount auf die Anzahl der Kontexte und Context auf das Array von Treiberkontexthandles für die Kontexte fest, die zum Flipvorgang beitragen.

Wenn der Anzeige-Miniporttreiber zuvor in einem Aufruf seiner DxgkDdiQueryAdapterInfo-Funktion angegeben hat, dass er ein MMIO-basiertes Flip unterstützt (durch Festlegen des FlipOnVSyncMmIo-Bitfeldflags im FlipCaps-Member der DXGK_DRIVERCAPS-Struktur auf TRUE), wird die DxgkDdiSetVidPnSourceAddress-Funktion des Treibers anschließend auf der Anforderungsebene des Geräts (Device Interrupt Request Level, DIRQL) für Flipzwecke aufgerufen. Die DxgkDdiSetVidPnSourceAddress-Funktion des Treibers muss die DAC programmieren und bei der folgenden vertikalen Synchronisierung mit dem Scannen der primären Oberfläche beginnen, deren Adresse im PrimaryAddress-Member 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 ausstellbaren Arbeitsspeicher befinden. DxgkDdiSetVidPnSourceAddress darf keinen Code aufrufen, der sich im ausgelagerten Speicher befindet, und darf keine Daten bearbeiten, die sich im ausgelagerten Speicher befinden.

Clone-View Situationen

In Klonansichtssituationen sollte der Anzeige-Miniporttreiber Flipvorgänge entsprechend der Beschreibung in diesem Abschnitt verarbeiten.

Wenn dwm ausgeführt wird, wird das DirectX-Grafikkernsubsystem flip synchronisiert, wenn eine vertikale Synchronisierung erfolgt. Das DirectX-Grafikkernsubsystem kann jedoch nur synchronisiert werden, wenn eine vertikale Synchronisierung eines einzelnen Grafikadapter-Ausgabesignals auftritt. Das DirectX-Grafikkernsubsystem muss alle anderen Grafikadapter-Ausgabesignale sofort umdrehen, um ein Tearing zu vermeiden.

Der GPU-Planer erkennt eine einzelne vertikale Synchronisierung und bestimmt, dass die gedrehte Oberfläche verfügbar ist, sobald der erste Monitor flip auftritt. Daher wird der Display-Miniporttreiber möglicherweise auf einer Oberfläche gerendert, die vom zweiten Monitor noch angezeigt wird.

Videoanwendungen (z. B. Windows Medienwiedergabe) kennen Klonansichtssituationen nicht und erwarten ein vorhersagbares vertikales Synchronisierungsintervall. Wenn der GPU-Scheduler die vertikalen Synchronisierungen beider Monitore erkennt, wäre das vertikale Synchronisierungsintervall (und damit das Flip) unvorhersehbar und würde im Laufe der Zeit driften, was dazu führen würde, dass die DWM- und Videoanwendungen nicht ordnungsgemäß funktionieren.

In Klonansichtssituationen muss der Display-Miniporttreiber einen vertikalen Synchronisierungs-Flip auf dem primären Monitor und ein MMIO-basiertes sofortiges Flip auf dem sekundären Monitor ausführen.

Die DxgkDdiSetVidPnSourceAddress-Funktion des Anzeigeminiporttreibers sollte die Adresse aufzeichnen, in die im Grafikkartenobjekt gekippt wird.

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

Weitere Informationen finden Sie unter Anforderungen zum Aufrufen dieser Funktion mit Mehrplanenüberlagerungen in einer VidPN-Präsentation mit Mehrebenenüberlagerungen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Kopfzeile d3dkmddi.h
IRQL PASSIVE_LEVEL. Wird bei DIRQL aufgerufen, wenn der Treiber ein MMIO-basiertes Flip unterstützt.

Weitere Informationen

DXGK_DRIVERCAPS

DXGKARG_SETVIDPNSOURCEADDRESS

DxgkCbNotifyDpc

DxgkCbNotifyInterrupt

DxgkDdiAddDevice

DxgkDdiSetVidPnSourceVisibility

DxgkDdiQueryAdapterInfo