Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het stuurprogramma voor de minipoortweergave kan voor elk gedefinieerd geheugen- of apertureruimtesegment opgeven of virtuele CPU-adressen rechtstreeks aan een toewijzing in het segment kunnen worden gekoppeld door de CpuVisible bitveld-markering in te stellen in de Vlaggen lid van de DXGK_SEGMENTDESCRIPTOR structuur voor het segment.
Om een virtueel CPU-adres aan een segment toe te wijzen, moet het segment lineaire toegang hebben via de PCI-apertuur. Met andere woorden, de offset van elke toewijzing binnen het segment moet gelijk zijn aan de offset in de PCI-apertuur. Daarom kan de videogeheugenbeheerder het bus-relevante fysieke adres van elke toewijzing berekenen op basis van de offset van de toewijzing binnen het opgegeven segment.
In het volgende diagram ziet u hoe virtuele adressen worden toegewezen aan een lineair geheugenruimtesegment.
In het volgende diagram ziet u hoe virtuele adressen worden toegewezen aan de onderliggende pagina's van een lineair aperture-ruimtesegment.
Voordat u een virtueel adres toewijst aan een deel van het segment, roept de videogeheugenbeheerder de DxgkDdiAcquireSwizzlingRange functie aan, zodat het stuurprogramma de opening kan instellen die wordt gebruikt voor het toegang krijgen tot bits van de toewijzing die mogelijk gezwibbeld kunnen zijn. Het stuurprogramma kan noch de offset in de PCI-apertuur aanpassen waar de toewijzing wordt benaderd, noch de hoeveelheid ruimte die de toewijzing in de apertuur inneemt. Als het stuurprogramma de toewijzing niet CPU-toegankelijk kan maken op basis van deze beperkingen (de hardware mogelijk geen unswizzling-apertuur meer heeft), verplaatst de videogeheugenbeheerder de toewijzing naar het systeemgeheugen en laat de toepassing daar toegang krijgen tot de bits.
Als de inhoud van een eerder gemaakte toewijzing zich in het systeemgeheugen bevindt wanneer het displaystuurprogramma in de gebruikersmodus de pfnLockCb--functie aanroept om directe toegang tot het geheugen aan te vragen, retourneert de videogeheugenbeheerder de systeemgeheugenbuffer aan het displaystuurprogramma in de gebruikersmodus en is het beeldschermminiportstuurprogramma niet betrokken bij het benaderen van de toewijzing. Daarom wordt de inhoud van de toewijzing niet gewijzigd door het stuurprogramma voor de weergave-miniport en blijft deze in niet-geswizzelde indeling. Dit impliceert dat wanneer een toewijzing die toegankelijk is voor CPU uit het videogeheugen wordt verwijderd, het minipoortstuurprogramma van de weergave de toewijzing ongedaan moet maken, zodat de resulterende systeemgeheugen-bits rechtstreeks kunnen worden geopend door de toepassing.
Als de GPU-resources die zijn gekoppeld aan een toewijzing die momenteel is toegewezen voor directe toegang tot toepassingen worden verwijderd, wordt de inhoud van de toewijzing overgebracht naar het systeemgeheugen, zodat de toepassing toegang kan blijven krijgen tot de inhoud op hetzelfde virtuele adres, maar op een ander fysiek medium. Om de overdracht in te stellen, roept de videogeheugenbeheerder de DxgkDdiBuildPagingBuffer-functie van het display miniportstuurprogramma aan om een paging buffer te maken, en roept de GPU-planner de DxgkDdiSubmitCommand-functie aan om de paging buffer in de wachtrij te plaatsen bij de GPU-uitvoeringseenheid. De hardwarespecifieke overdrachtsopdracht bevindt zich in de pagina-buffer. Zie Een opdrachtbuffer verzendenvoor meer informatie. Het videogeheugenbeheer zorgt ervoor dat de overgang van video naar systeemgeheugen onzichtbaar is voor de toepassing. Het stuurprogramma moet er echter voor zorgen dat de bytevolgorde van een toewijzing via de PCI-poort exact overeenkomt met de bytevolgorde van de toewijzing wanneer deze wordt verwijderd.
Voor segmenten met een openingsruimte bevinden de onderliggende bits van de toewijzing zich al in het systeemgeheugen, dus er is geen overdracht (onwizzling) van gegevens vereist tijdens het verwijderingsproces. Daarom kan een CPU-toegankelijke toewijzing in een aperture-space segment niet gezwizzeld worden als deze direct door een applicatie wordt benaderd.
Als een oppervlak rechtstreeks toegankelijk is via de CPU door een toepassing, maar in een segment in een opening-ruimte wordt geherstructureerd, moeten de grafische stuurprogramma's het oppervlak als twee verschillende allocaties implementeren. Wanneer het weergavestuurprogramma voor de gebruikersmodus een dergelijk oppervlak maakt, kan de pfnAllocateCb functie aanroepen en de NumAllocations lid van de D3DDDICB_ALLOCATE structuur instellen op 2 en de pPrivateDriverData leden van de D3DDDI_ALLOCATIONINFO structuren in de pAllocationInfo array van D3DDDICB_ALLOCATE om te verwijzen naar private gegevens over de toewijzingen (zoals hun geswizzlede en niet-geswizzlede formaten). De toewijzing die door de GPU wordt gebruikt, bevat bits in swizzled-indeling en de toewijzing die door de toepassing wordt geopend, bevat de bits in niet-gewikte indeling. De videogeheugenbeheerder roept de functie DxgkDdiCreateAllocation aan van het display miniportstuurprogramma om de toewijzingen te maken. Het stuurprogramma voor de minipoortweergave interpreteert de persoonlijke gegevens (in de pPrivateDriverData lid van de DXGK_ALLOCATIONINFO structuur voor elke toewijzing) die wordt doorgegeven vanuit het weergavestuurprogramma voor de gebruikersmodus. De videogeheugenbeheerder is zich niet bewust van de indeling van de toewijzingen; het wijst alleen blokken geheugen van bepaalde grootten en uitlijningen toe voor de toewijzingen. Een aanroep van de gebruikersmodus weergave-stuurprogramma Vergrendelingsfunctie om het oppervlak te vergrendelen voor verwerking, veroorzaakt de volgende acties:
Het displaystuurprogramma in de gebruikersmodus roept de pfnRenderCb--functie aan om de unswizzle-operatie in de opdrachtbuffer naar de Direct3D-runtime en naar het display miniportstuurprogramma te versturen.
Het displaystuurprogramma in de gebruikersmodus roept de pfnLockCb- functie aan om de niet-gewikeerde toewijzing te vergrendelen. Houd er rekening mee dat de gebruikersmodusdisplaydriver de D3DDDILOCKCB_DONOTWAIT-vlag niet mag instellen in het Flags-element van de D3DDDICB_LOCK-structuur.
De functie pfnLockCb wacht totdat de overdracht (unswizzling) tussen toewijzingen wordt uitgevoerd.
De pfnLockCb-functie verzoekt dat het miniportstuurprogramma een virtueel adres verkrijgt voor de niet-gewikeerde toewijzing en retourneert het virtuele adres aan het weergavestuurprogramma in gebruikersmodus in het pData-lid van D3DDDICB_LOCK.
Het weergavestuurprogramma in de gebruikersmodus retourneert het virtuele adres van de niet-veranderde toewijzing aan de toepassing in de pSurfData lidstructuur van D3DDDIARG_LOCK.