DXGKDDI_PRESENT Rückruffunktion (d3dkmddi.h)
Die DxgkDdiPresent-Funktion kopiert Inhalte aus Quellzuordnungen auf eine primäre Oberfläche (und manchmal auch auf Systemspeicherzuordnungen außerhalb des Bildschirms).
Syntax
DXGKDDI_PRESENT DxgkddiPresent;
NTSTATUS DxgkddiPresent(
[in] IN_CONST_HANDLE hContext,
[in/out] INOUT_PDXGKARG_PRESENT pPresent
)
{...}
Parameter
[in] hContext
Ein Handle für den Gerätekontext für die Kopierinformationen. Die DxgkDdiCreateContext-Funktion des Anzeigeminiporttreibers hat dieses Handle zuvor im hContext-Element der DXGKARG_CREATECONTEXT Struktur zurückgegeben, auf die der pCreateContext-Parameter von DxgkDdiCreateContext verweist.
Wenn der Treiber die Kontexterstellung nicht unterstützt, ersetzt das Microsoft DirectX-Grafikkernsubsystem das Handle durch den Kontext durch ein Handle für das Gerät. Die DxgkDdiCreateDevice-Funktion des Anzeigeminiporttreibers hat zuvor den Gerätehandle im hDevice-Element der DXGKARG_CREATEDEVICE-Struktur zurückgegeben, auf die der pCreateDevice-Parameter von DxgkDdiCreateDevice verweist.
[in/out] pPresent
Ein Zeiger auf eine DXGKARG_PRESENT Struktur, die Informationen zum Kopiervorgang enthält.
Rückgabewert
DxgkDdiPresent gibt einen der folgenden Werte zurück:
Rückgabecode | Beschreibung |
---|---|
STATUS_SUCCESS | DxgkDdiPresent hat den Inhalt erfolgreich kopiert. |
STATUS_NO_MEMORY oder STATUS_INSUFFICIENT_RESOURCES | DxgkDdiPresent konnte keinen Speicher zuordnen, der für die Vervollständigung erforderlich war. |
STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER | Der aktuelle DMA-Puffer (Direct Memory Access) ist erschöpft. |
STATUS_GRAPHICS_CANNOTCOLORCONVERT | Der Display-Miniporttreiber hat eine Bitblockübertragung (Bitblt) für die Farbkonvertierung erkannt, die das Gerät nicht ausführen konnte. Die Microsoft Direct3D-Runtime verhindert, dass die Anwendung fortgesetzt wird, und die Anwendung erhält einen Fehler beim Kopieren von Inhalten. |
STATUS_PRIVILEGED_INSTRUCTION | DxgkDdiPresent hat nicht privilegierte Anweisungen erkannt (d. h. Anweisungen, die über die Berechtigungen des aktuellen CPU-Prozesses der zentralen Verarbeitungseinheit hinausgehen). |
STATUS_ILLEGAL_INSTRUCTION | DxgkDdiPresent hat Anweisungen erkannt, die Grafikhardware nicht unterstützen kann. |
STATUS_INVALID_HANDLE | DxgkDdiPresent hat ein ungültiges Handle im Befehlspuffer erkannt. |
STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE | Der Anzeigeminiporttreiber hat einen Fehler im DMA-Stream erkannt. Das Grafikkontextgerät befindet sich in einem verlorenen Zustand, wenn der Treiber diesen Fehlercode zurückgibt. |
Hinweise
Das DirectX-Grafikkernsubsystem ruft die DxgkDdiPresent-Funktion des Anzeigeminiporttreibers auf, um Inhalte aus Quellzuordnungen in der Regel auf die primäre Oberfläche zu kopieren. (Diese Funktion kann auch Inhalte in eine Systemspeicherzuordnung außerhalb des Bildschirms kopieren.) Da eine primäre Oberfläche lose definiert ist, kann DxgkDdiPresent für die folgenden Szenarien implementiert werden:
- Abhängig von der Position des Fensters muss die DxgkDdiPresent-Funktion für verschiedene Vorwahlen ausgeführt werden, die sich auf demselben Adapter oder auf verschiedenen Adaptern befinden können.
- Der Primäre befindet sich auf einem Remotemonitor und wird über einen Terminaldiensteclient oder Microsoft NetMeeting zugegriffen.
- Kürzlich ist ein Moduswechsel aufgetreten, und das primäre Format unterscheidet sich vom Quellformat, sodass eine Farbkonvertierung erforderlich ist. Darüber hinaus kann der DxgkDdiPresent-Vorgang aufgrund von Fensterausschnitten und -reihenfolgen abgeschnitten werden.
Der Anzeigeminiporttreiber muss die Besonderheiten der vorherigen Szenarien nicht kennen, solange der Treiber die folgenden Abstraktionen unterstützt:
- Bei einem Kopiervorgang von einer Videospeicherquelle in ein primäres Video- oder Systemspeicherziel, eine Kopie von einer Off-Screen-Systemspeicherquelle zum primären Ziel, eine Kopie von und in die primäre Quelle oder eine Kopie von der primären Quelle in ein Off-Screen-Systemspeicherziel wird die Quelle vom hDeviceSpecificAllocation-Member des pAllocationList[DXGK_PRESENT_SOURCE_INDEX] Arrayelements der DXGKARG_PRESENT-Struktur angegeben, die pPresent der DxgkDdiPresent-Parameter zeigt auf. Das Ziel, bei dem es sich entweder um das aktuelle primäre Element des Geräts oder um eine Systemspeicherzuordnung außerhalb des Bildschirms handelt, wird vom hDeviceSpecificAllocation-Element des pAllocationList[DXGK_PRESENT_DESTINATION_INDEX]-Arrayelements von DXGKARG_PRESENT angegeben. Wenn das Ziel der Quelle (d. a. Zielquelle == ) entspricht, ist der Kopiervorgang eine Bitblockübertragung von Bildschirm zu Bildschirm (Bitblt). Daher legt das Grafiksubsystem die Quelle und das Ziel auf die folgenden Werte fest:
- destination != NULL (d. a. ziel == nonNULL)
- source != NULL (d. a. quelle == nonNULL)
- In einem Videospeicher, der von der aktuellen Zuordnung in eine andere Zuordnung umdreht, kann die Quelle vom Betriebssystem angegeben und im hDeviceSpecificAllocation-Member des pAllocationList[DXGK_PRESENT_SOURCE_INDEX]-Arrayelements von DXGKARG_PRESENT festgelegt werden. Das Grafiksubsystem legt die Quelle und das Ziel auf die folgenden Werte fest:
- Destination == NULL
- source != NULL (d. a. quelle == nonNULL)
Hinweis Ein No-Op-Flip kann aus derselben Quellzuordnung wie die aktuell gescannte Zuordnung durchgeführt werden. Ein No-Op-Flip wird verwendet, um eine Wartezeit in der Warteschlange auf ein vertikales Leerzeichen im Renderingstream einzufügen. Der Display-Miniporttreiber sollte einen Hardware-Flip-Befehl einfügen, als würde er in eine andere Zuordnung umgedreht. - Bei einem Farbfüllvorgang für die primäre Oberfläche ist keine Quellzuordnung erforderlich, und das Ziel ist ein primäres Zuordnungshandle, das vom hDeviceSpecificAllocation-Member des pAllocationList[DXGK_PRESENT_DESTINATION_INDEX]-Arrayelements von DXGKARG_PRESENT angegeben wird. Das Color-Element von DXGKARG_PRESENT befindet sich in der Regel im D3DDDIFMT_A8R8G8B8 Format des D3DDDIFORMAT Enumerationstyps. Wenn das primäre Format jedoch palettisiert RGB ist, enthält Color den Palettenindex. Daher legt das Grafiksubsystem die Quelle und das Ziel auf die folgenden Werte fest:
- destination != NULL (d. a. ziel == nonNULL)
- Source == NULL
Das Grafiksubsystem ruft dann einen neuen DMA-Puffer ab und ruft die DxgkDdiPresent-Funktion des Treibers erneut mit der gleichen Liste von RECT-Strukturen auf wie der vorherige DxgkDdiPresent-Aufruf . Der Treiber muss das MultipassOffset-Element der DXGKARG_PRESENT-Struktur verwenden, auf die von pPresent verwiesen wird, um den Fortschritt aufzuzeichnen, der beim Abschließen der RECT-Liste im vorherigen Aufruf von DxgkDdiPresent gemacht wurde, damit der Treiber an der Stelle fortfahren kann, an der er mit dem neuen DMA-Puffer beendet wurde. Wenn die DxgkDdiPresent-Funktion des Treibers die Liste der RECT-Strukturen abschließt, gibt sie STATUS_SUCCESS zurück.
Zusätzlich zum Generieren eines DMA-Puffers muss der Anzeigeminiporttreiber eine Patchspeicherortliste generieren, die die verschiedenen Offsets innerhalb des DMA-Puffers angibt, die später gepatcht werden müssen, wenn physische Adressen für Zuordnungen bekannt sind. Manchmal stellt der Videospeicher-Manager dem Treiber vorab gepatchte Informationen (d. h. die letzten bekannten physischen Adressen für die Quelle und das Ziel) in der Zuordnungsliste bereit.
Wenn der Videospeicher-Manager diese Informationen bereitstellt, muss der Treiber den DMA-Puffer generieren, indem er bestimmt, dass diese physischen Adressen die endgültigen Adressen sind, die das DirectX-Grafikkernsubsystem bereitstellt. Das Grafiksubsystem ruft die DxgkDdiPatch-Funktion im DMA-Puffer möglicherweise nicht auf, um sie später erneut zu patchen. Daher muss der Treiber die Pre-Patch-Informationen verwenden, um den DMA-Puffer ordnungsgemäß zu generieren. Vorab gepatchte Informationen werden für Element N bereitgestellt, wenn das SegmentId-Element des Nth-Elements des pAllocationList-Arrays von DXGKARG_PRESENT nichtzero ist.
Die primäre Zuordnung einer Quelle wird in der DxgkDdiCommitVidPn-Funktion angegeben. Wenn mehrere Pfade von der angegebenen Quelle stammen (Klonmodus), muss der Anzeigeminiporttreiber sicherstellen, dass die Ausgaben im Pfadrotationsmodus für die verschiedenen Ziele ordnungsgemäß gedreht werden. Alle parameter, die für DxgkDdiPresent bereitgestellt werden, sind rotationagnostisch. Die Quell- und Zielrechtecke können beide der gesamte Bildschirm sein, wie es von Clients wahrgenommen wird (z. B. 768 x 1024).
DxgkDdiPresent sollte seitenfähig gemacht werden.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista |
Zielplattform | Desktop |
Kopfzeile | d3dkmddi.h |
IRQL | PASSIVE_LEVEL |
Weitere Informationen
DXGKARG_PRESENT