DXGI_DDI_BASE_FUNCTIONS Struktur (dxgiddi.h)
Die DXGI_DDI_BASE_FUNCTIONS-Struktur enthält Funktionen, die der Benutzermodusanzeigetreiber implementieren kann, um Aufgaben auf niedriger Ebene auszuführen, z. B. das Darstellen gerenderter Frames auf einer Ausgabe, steuern des Gammas und Verwalten eines Vollbildübergangs.
Syntax
typedef struct DXGI_DDI_BASE_FUNCTIONS {
HRESULT()(DXGI_DDI_ARG_PRESENT *) * pfnPresent;
HRESULT()(DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS *) * pfnGetGammaCaps;
HRESULT()(DXGI_DDI_ARG_SETDISPLAYMODE *) * pfnSetDisplayMode;
HRESULT()(DXGI_DDI_ARG_SETRESOURCEPRIORITY *) * pfnSetResourcePriority;
HRESULT()(DXGI_DDI_ARG_QUERYRESOURCERESIDENCY *) * pfnQueryResourceResidency;
HRESULT()(DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES *) * pfnRotateResourceIdentities;
HRESULT()(DXGI_DDI_ARG_BLT *) * pfnBlt;
} DXGI_DDI_BASE_FUNCTIONS;
Angehörige
pfnPresent
Zeiger auf die PresentDXGI--Funktion, die den Benutzermodusanzeigetreiber benachrichtigt, dass das Rendern einer Anwendung abgeschlossen ist, und fordert an, dass der Treiber auf der Zieloberfläche angezeigt wird.
Das hDevice Member der DXGI_DDI_ARG_PRESENT Struktur, auf das der pPresentData Parameter verweist, ist dasselbe Handle, auf das die CreateDevice(D3D10)-Funktion des Treibers zurück an die Laufzeit im hDrvDevice Member der D3D10DDIARG_CREATEDEVICE-Struktur übergeben wird. Daher müssen Treiberautoren den Typ dieses Handle sorgfältig definieren. Darüber hinaus können Treiber verschiedene Implementierungen der PresentDXGI--Funktion bereitstellen, basierend auf der DDI-Implementierung den Aufruf von CreateDevice(D3D10)-behandelt hat. Die Laufzeit kombiniert niemals Treiberhandles über DDI-Implementierungen hinweg. Ebenso sind die hSurfaceToPresent und hDstResource Member von DXGI_DDI_ARG_PRESENT auch treiberdefinierte Ressourcenhandles, die der Treiber in vorherigen Aufrufen der CreateResource(D3D10)- Funktion des Treibers an die Laufzeit zurückgegeben hat.
Der pDXGIContext Mitglied von DXGI_DDI_ARG_PRESENT ist ein undurchsichtiger Kommunikationsmechanismus. Die Laufzeit übergibt diesen DXGI-Kontext an den Treiber. Der Treiber sollte diesen DXGI-Kontext unverändert in den pDXGIContext Member der DXGIDDICB_PRESENT Struktur kopieren, wenn der Treiber die pfnPresentCbDXGI--Funktion aufruft.
Der Treiber muss alle teilweise erstellten Renderdaten (Befehlspuffer) mithilfe der pfnRenderCb--Funktion übermitteln. Danach muss der Treiber die Parameter des Ressourcenhandles in Kernelhandles übersetzen und diese Kernelhandles in einem Aufruf von pfnPresentCbDXGIverwenden.
Anmerkung
Wenn die PresentDXGI--Funktion des Treibers sRGB-formatierten Inhalt von einer Quelloberfläche auf eine Nicht-sRGB-Zieloberfläche kopiert, sollte der Treiber den sRGB-Inhalt unverändert kopieren (d. h. der Treiber sollte den sRGB nicht in lineare Konvertierung ausführen).
pPresentData
[in] Ein Zeiger auf eine DXGI_DDI_ARG_PRESENT Struktur, die beschreibt, wie die Zieloberfläche angezeigt wird.
pfnGetGammaCaps
Die GetGammaCapsDXGI Funktion ruft Gammafunktionen ab.
pGammaData
[in] Ein Zeiger auf eine DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS Struktur, die Gammafunktionen enthält.
pfnSetDisplayMode
Ein Zeiger auf die SetDisplayModeDXGI--Funktion des Treibers.
pfnSetResourcePriority
Die SetResourcePriorityDXGI--Funktion legt die Eviction-from-Memory-Priorität für eine Ressource fest.
Die Microsoft Direct3D-Laufzeit ruft SetResourcePriorityDXGI- auf, um die Prioritätsstufe für eine Ressource festzulegen. Der Anzeigetreiber für den Benutzermodus sollte den Ressourcenhandle übersetzen, der im hResource- Mitglied der DXGI_DDI_ARG_SETRESOURCEPRIORITY Struktur angegeben wird, auf das pPriorityData- verweist, in ein Zuordnungshandle. Nachdem der Treiber diese Übersetzung ausgeführt hat, sollte der Treiber das resultierende Handle in einem Aufruf der pfnSetPriorityCb-Funktion übergeben.
pPriorityData
[in] Ein Zeiger auf eine DXGI_DDI_ARG_SETRESOURCEPRIORITY Struktur, die die Prioritätsebene beschreibt, auf die eine Ressource festgelegt werden soll.
pfnQueryResourceResidency
Diese Funktion bestimmt die Residency der angegebenen Ressourcenliste.
Die Microsoft Direct3D-Laufzeit ruft die QueryResourceResidencyDXGI- funktion des Benutzermodus des Anzeigetreibers für Anwendungen auf, um zu ermitteln, ob das Betriebssystem zum Zeichnen einen erheblichen Stillstand verursacht, wenn das System Ressourcen GPU-barrierefrei machen muss. Die Informationen, die von QueryResourceResidencyDXGI- zurückgegeben werden, sind eine Annäherung der Ressourcenaufbewahrung, da die Ressourcen vor der Verwendung der Ressourcen herabgestuft werden können.
QueryResourceResidencyDXGI- muss die funktion pfnQueryResidencyCb aufrufen. pfnQueryResidencyCb den Residency-Status einer Ressource in den Elementen des Arrays zurück, die durch das pResidencyStatus Mitglied der D3DDDICB_QUERYRESIDENCY Struktur angegeben wird. Wenn pfnQueryResidencyCb D3DDDI_RESIDENCYSTATUS_NOTRESIDENT für eine Abfrage zurückgibt, muss QueryResourceResidencyDXGI- S_NOT_RESIDENT zurückgeben. Wenn pfnQueryResidencyCb für eine Abfrage D3DDDI_RESIDENCYSTATUS_RESIDENTINSHAREDMEMORY zurückgibt und keine D3DDDI_RESIDENCYSTATUS_NOTRESIDENT für eine Abfrage zurückgibt, muss QueryResourceResidencyDXGI- S_RESIDENT_IN_SHARED_MEMORY zurückgeben. QueryResourceResidencyDXGI- muss S_OK nur zurückgeben, wenn alle Aufrufe von pfnQueryResidencyCb für alle Abfragen D3DDDI_RESIDENCYSTATUS_RESIDENTINGPUMEMORY zurückgeben.
Für jede Ressource, die von der Laufzeit über einen Aufruf an QueryResourceResidencyDXGIabgefragt wird, muss der Anzeigetreiber für den Benutzermodus bestimmen, welche Zuordnungen der Ressource durch einen Aufruf von pfnQueryResidencyCbabgefragt werden sollen. Bei einer Ressource, die eine einzelne Zuordnung besitzt, ist die Bestimmung einfach – der Treiber fragt diese Zuordnung ab. Wenn eine Ressource jedoch mehrere Zuordnungen besitzt, ist die Bestimmung schwieriger. Der Treiber muss bestimmen, welche Zuordnungen eine Anwendung wahrscheinlich für das Rendern verwendet, und der Treiber muss nur diese Zuordnungen abfragen. Wenn beispielsweise eine Ressource eine Zuordnung besitzt, die für das Rendern und eine Scratch-Zuordnung verwendet wird, die einen Sperrvorgang behandelt, sollte der Treiber nur die Residency der ersten Zuordnung abfragen, da eine Anwendung die zweite Zuordnung für das Rendern wahrscheinlich nicht verwendet.
Anmerkung
Da die Laufzeit die Residency-Abfrage von Systemspeicherressourcen nicht unterstützt, schlägt die Laufzeit immer Anforderungen von Anwendungen für den Residency-Status von Systemspeicherressourcen fehl und ruft niemals die QueryResourceResidencyDX GI-Funktion des Benutzermodus für diese Systemspeicherressourcen auf.
pResidencyData
[in] Ein Zeiger auf eine DXGI_DDI_ARG_QUERYRESOURCERESIDENCY Struktur, die eine Liste der Ressourcen beschreibt, auf denen die Residency überprüft wird.
pfnRotateResourceIdentities
Dreht eine Liste von Ressourcen.
Die RotateResourceIdentitiesDXGI--Funktion muss Identitäten des Arrays von Ressourcen austauschen, die im pResources Member der DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES Struktur übergeben werden, auf die der pRotateData Parameter verweist. Wenn sich das Array von Ressourcen beispielsweise auf Ressourcen X, Y und Z bezieht, muss RotateResourceIdentitiesDXGI- diese Handles drehen, um auf Y, Z und X zu verweisen, in zunehmender Arrayindexreihenfolge. Insbesondere sollte der Anzeigetreiber für den Benutzermodus die Kernelhandles der entsprechenden Ressourcen austauschen. Der Treiber sollte jedoch die entsprechenden Laufzeithandles (RT) nicht austauschen. Die Laufzeit ruft RotateResourceIdentitiesDXGI- auf, um Puffer während der Präsentation zu drehen. Daher ist ein Aufruf von RotateResourceIdentitiesDXGI selten. Die Laufzeit kann das D3D10_DDI_BIND_PRESENT Flag im BindFlags Member der D3D10DDIARG_CREATERESOURCE Struktur angeben, wenn die Laufzeit die CreateResource(D3D10)- Funktion des Treibers aufruft, um anzugeben, dass die Ressource an einem Drehvorgang teilnehmen kann.
Der Anzeigetreiber für den Benutzermodus muss auch andere Aspekte des Austauschs von Identitäten behandeln. In Direct3D Version 10 können sich Ansichten beispielsweise auf Ressourcen beziehen. und solche Ansichten können Ressourcenadressen enthalten, die in sie eingebettet sind. Daher muss der Treiber solche Ansichten erneut erstellen. Außerdem muss der Treiber möglicherweise die aktuell gebundenen Ansichten erneut anwenden.
Ab Windows 8 muss der Treiber die Drehung von Stereo-Hintergrundpuffern unterstützen.
pRotateData
[in] Ein Zeiger auf eine DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES Struktur, die eine Liste der zu drehenden Ressourcen beschreibt.
pfnBlt
Kopiert den Inhalt einer Quelloberfläche auf eine Zieloberfläche und kann den Inhalt drehen.
Die Direct3D-Laufzeit legt möglicherweise die Flags Member der DXGI_DDI_ARG_BLT Struktur fest, auf die der pBltData-Parameter verweist, sodass die BltDXGI--Funktion zum Ausführen eines Bitblockübertragungsvorgangs (Bitblt) zum Auflösen von ressourcen mit mehreren Stichproben verwendet wird, eine Konvertierung des Farbformats durchführt. und führt eine Streckung oder Verkleinerung auf einmal aus. Die Direct3D-Laufzeit legt jedoch niemals das Flags Member von DXGI_DDI_ARG_BLT auf Null (d. h. keine Flags festgelegt) zusammen mit dem DXGI_DDI_MODE_ROTATION_IDENTITY im Drehen Member von DXGI_DDI_ARG_BLT festgelegten wert (d. h. keine Drehung) fest, um einen geraden Speicherkopievorgang auszuführen. Wenn nicht beide Ressourcen mit mehreren Beispielen verwendet werden, ruft die Direct3D-Laufzeit stattdessen die ResourceCopy- des Treibers oder ResourceCopyRegion--Funktion auf, um einen geraden Speicherkopievorgang auszuführen.
Die Qualität des Dehnens oder Verkleinerns, den der Anzeigetreiber im Benutzermodus ausführt, muss so gut sein wie das Strecken oder Verkleinern, das ein bilinearer Filter ausführt.
Die Direct3D-Laufzeit ruft die BltDXGI--Funktion des Treibers selten auf. Das heißt, die Laufzeit sollte BltDXGI- nicht mehr als einmal oder zweimal pro Frame aufrufen, da die Laufzeit BltDXGI hauptsächlich zur Unterstützung einer Präsentation verwendet.
Wenn die Laufzeit BltDXGI- für eine Präsentation aufruft, legt die Laufzeit das Bitfeld-Flag "Präsentieren Bitfeld" im Flags Member von DXGI_DDI_ARG_BLTfest. Die Laufzeit legt die Present Bitfeld-Flag fest, um den Treiber darüber zu informieren, dass zusätzliche Anforderungen für die Bitblt bestehen und dass eine zusätzliche Synchronisierung erforderlich sein kann (z. B. muss die Laufzeit möglicherweise zusätzliche Synchronisierung in Computerkonfigurationen durchführen, die zwei Grafikkarten enthalten, die jeweils separate Teile des Displays verarbeiten). Wenn die "Präsentieren Bitfeldflagge" festgelegt ist, sollte der Treiber einen Kopiervorgang aus den Hintergrundpuffern einer Anwendung auf die freigegebene Oberfläche des DWM ausführen. Da die Synchronisierung für diesen Kopiervorgangstyp ungenau ist, sollten zerreißende Artefakte die schlechteste Art von Artefakten sein, die ein Benutzer erlebt. Für diese Art des Kopiervorgangs sollte der Treiber keinen Multidurchlaufansatz verwenden, indem er zuerst in die Zieloberfläche aufgelöst wird und dann die Ergebnisse an Ort und Stelle konvertiert, da die möglichen Artefakte viel schlimmer wären.
Wenn der Treiber die Rückgabe von DXGI_DDI_ERR_UNSUPPORTED während der Erstellung einer primären Oberfläche unterstützt (d. h., DXGI_DDI_ERR_UNSUPPORTED von einem Aufruf an die CreateResource(D3D10)- funktion zurückzugeben, wobei die D3D10_DDI_BIND_PRESENT Flag im BindFlags-Element Member von D3D10DDIARG_CREATERESOURCE zusammen mit dem pPrimaryDesc Mitglied des D3D10DDIARG_CREATERESOURCE festlegen in nicht NULL) muss der Treiber auch die Drehung während eines Kopiervorgangs unterstützen. Wenn der Treiber nie DXGI_DDI_ERR_UNSUPPORTED von einem Aufruf an die CreateResource(D3D10)- funktion zurückgibt, übergibt die Laufzeit niemals den DXGI_DDI_MODE_ROTATION_ROTATE90, DXGI_DDI_MODE_ROTATION_ROTATE180oder DXGI_DDI_MODE_ROTATION_ROTATE270 Wert an das Rotate Member von DXGI_DDI_ARG_BLT. Daher ist in dieser Situation die BltDXGI Funktion des Fahrers nicht erforderlich, um die Drehung zu unterstützen.
Die Laufzeit legt einen Wert im Rotate Member von DXGI_DDI_ARG_BLT fest, um die Anzahl von Grad anzugeben, um den Inhalt der Quelle gegen den Uhrzeigersinn zu drehen, bevor der Treiber den Inhalt an das Ziel kopiert. Drehung wird in Schritten von 90 Grad angegeben.
Anmerkung
Wenn die BltDXGI--Funktion des Treibers sRGB-formatierten Inhalt von einer Quelloberfläche auf eine Nicht-sRGB-Zieloberfläche kopiert, sollte der Treiber den sRGB-Inhalt unverändert kopieren (d. h. der Treiber sollte den sRGB nicht in lineare Konvertierung ausführen).
Quelleinschränkungen
Die BltDXGI--Funktion verwendet immer eine ganze Quellunterressource (im Vergleich zu einigen teilrechteckigen Bereichen), um den Bitblt-Vorgang auszuführen. Darüber hinaus ist die Quelle eine D3D10DDIRESOURCE_TEXTURE2D Darstellung (angegeben im ResourceDimension Member von D3D10DDIARG_CREATERESOURCE, wenn die Quelle in einem Aufruf der CreateResource(D3D10) Funktion des Anzeigetreibers im Benutzermodus erstellt wird). Wenn die Laufzeit das Resolve Bitfield im Flags Member von DXGI_DDI_ARG_BLTfestlegt, ist die Quelle eine ressource mit mehreren Beispielen. Die Quellressource ist auf eine Ressource beschränkt, in der das D3D10_DDI_BIND_PRESENT Flag im BindFlags Member von D3D10DDIARG_CREATERESOURCEfestgelegt wurde. Das Format der Quelle (im Format Element von D3D10DDIARG_CREATERESOURCE) ist auf Anzeigemodusformate beschränkt, die durch die folgenden Werte aus der DXGI_FORMAT-Enumeration angegeben werden:
- DXGI_FORMAT_B5G6R5_UNORM
- DXGI_FORMAT_B5G5R5A1_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM (Siehe Hinweis unten.)
- DXGI_FORMAT_B8G8R8X8_UNORM
- DXGI_FORMAT_R16G16B16A16_FLOAT
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
Anmerkung
Wenn der Treiber das Quellformat DXGI_FORMAT_B8G8R8A8_UNORMunterstützt, gelten die folgenden Einschränkungen:
- Wenn der Treiber einen Bitbltvorgang von einem Gleitkommaformat bis zu einem ganzzahligen Format wie BGRA8888 durchführt, muss er Gamma implizit in die Ergebnisse codieren.
- Wenn der Treiber dagegen einen Bitblt-Vorgang von einem ganzzahligen Format in ein Gleitkommaformat durchführt, muss er implizit die Gammacodierung aus den Ergebnissen entfernen.
Zieleinschränkungen
Das Ziel ist auch eine D3D10DDIRESOURCE_TEXTURE2D Darstellung. Das Format des Ziels ist auch auf Anzeigemodusformate beschränkt. Die Zielressource ist auf eine Ressource beschränkt, die als Renderziel gebunden ist (D3D10_DDI_BIND_RENDER_TARGET im BindFlags Member von D3D10DDIARG_CREATERESOURCE oder D3D11DDIARG_CREATERESOURCEfestgelegt).
Erstellen eines Stereo-Hintergrundpuffers
Ab Windows 8 sollte der Treiber, wenn der Treiber einen Stereobackpuffer erstellen muss, Elemente der D3D10DDIARG_CREATERESOURCE- oder D3D11DDIARG_CREATERESOURCE-Struktur festlegen, auf die der pCreateResource Parameter des CreateResource(D3D10) oder CreateResource(D3D11) Funktionen verweist, folgendermaßen:
- Legen Sie den ArraySize Member auf einen Wert von 2 fest.
- Legen Sie den D3D10_DDI_BIND_PRESENT Flagwert im BindFlags Member fest.
Um die Stereopräsentation zu unterstützen, muss die BltDXGI--Funktion alle Werte für die DstSubresource und SrcSubresource Member der DXGI_DDI_ARG_BLT Struktur zulassen, die sich innerhalb des Bereichs der Quell- und Zielressourcen befinden.
pBltData
[in] Ein Zeiger auf eine DXGI_DDI_ARG_BLT Struktur, die die Parameter einer Bitblockübertragung (Bitblt) beschreibt.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows Vista |
Header- | dxgiddi.h (include D3d10umddi.h) |