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.
In Direct3D 12 worden query's gegroepeerd in matrices van query's die een query-heap worden genoemd. Een query-heap heeft een type dat de geldige typen query's definieert die met die heap kunnen worden gebruikt.
- verschillen in query's van Direct3D 11 naar Direct3D 12
- query's uitvoeren
- Query-heaps maken
- gegevens extraheren uit een query
- Verwante onderwerpen
Verschillen in query's van Direct3D 11 tot Direct3D 12
De volgende querytypen zijn niet langer aanwezig in Direct3D 12, de functionaliteit die in andere processen wordt opgenomen:
- Gebeurtenisquery's - gebeurtenis wordt nu verwerkt door omheiningen.
- Niet-aaneengesloten tijdstempelquery's - GPU-klokken kunnen worden ingesteld op een stabiele status in Direct3D 12 (zie de sectie Timing). Vergelijkingen van GPU-klokken zijn niet zinvol als de GPU helemaal niet actief is tussen de tijdstempels (ook wel een niet-aaneengesloten query genoemd). Met stabiele macht twee tijdstempelquery's die zijn uitgegeven uit verschillende opdrachtlijsten, zijn betrouwbaar vergelijkbaar. Twee tijdstempels binnen dezelfde opdrachtlijst zijn altijd betrouwbaar vergelijkbaar.
- Stream-uitvoerstatistiekenquery's: in Direct3D 12 is er geen SO-overloopquery (Single Stream Output) voor alle uitvoerstromen. Apps moeten meerdere query's met één stroom uitgeven en vervolgens de resultaten correleren.
- Stream-uitvoerstatistieken predicaat- en occlusiepredicatiequery's : query's (die naar het geheugen schrijven) en predicatie (die uit het geheugen worden gelezen) zijn niet meer gekoppeld en dus zijn deze querytypen niet nodig.
Er is een nieuw binair occlusiequerytype toegevoegd aan Direct3D 12. Dit maakt predicatiestrategieën mogelijk die alleen aangeven of een object volledig is afgeklonken of niet (in plaats van het aantal pixels dat is opgenomen) om dit aan te geven aan het apparaat, waardoor de query's mogelijk efficiënter kunnen worden uitgevoerd.
Query's uitvoeren op heaps
Query's kunnen één zijn van een aantal typen (D3D12_QUERY_HEAP_TYPE) en worden gegroepeerd in query-heaps voordat ze worden verzonden naar de GPU.
Er is een nieuw querytype D3D12_QUERY_TYPE_BINARY_OCCLUSION beschikbaar is en fungeert als D3D12_QUERY_TYPE_OCCLUSION, behalve dat er een binair resultaat van 0/1 wordt geretourneerd: 0 geeft aan dat er geen steekproeven zijn doorgegeven voor diepte- en stenciltests, 1 geeft aan dat ten minste één voorbeeld van diepte- en stenciltests is geslaagd. Hierdoor kunnen occlusiequery's geen invloed hebben op gpu-prestatieoptimalisatie die is gekoppeld aan diepte-/stenciltests.
Query-heaps maken
De API's die relevant zijn voor het maken van query-heaps zijn de enum-D3D12_QUERY_HEAP_TYPE, de struct D3D12_QUERY_HEAP_DESCen de methode CreateQueryHeap.
De kernruntime valideert dat het heap-type query een geldig lid is van de D3D12_HEAP_TYPE opsomming en of het aantal groter is dan 0.
Elk afzonderlijk query-element in een query-heap kan afzonderlijk worden gestart en gestopt.
De API's voor het gebruik van de query-heaps zijn de enum-D3D12_QUERY_TYPEen de methoden BeginQuery- en EndQuery-.
D3D12_QUERY_TYPE_TIMESTAMP is de enige query die alleen ondersteuning biedt voor EndQuery-. Voor alle andere querytypen is BeginQuery- en EndQuery-vereist.
De foutopsporingslaag valideert het volgende:
- Het is illegaal om een tijdstempelquery te starten. U kunt deze alleen beëindigen
- Het is illegaal om een query twee keer te starten zonder deze te beëindigen (voor een bepaald element). Voor query's waarvoor zowel begin als einde is vereist, is het illegaal om een query te beëindigen voordat het bijbehorende begin (voor een bepaald element) wordt gestart.
- Het querytype dat is doorgegeven aan BeginQuery- moet overeenkomen met het querytype dat is doorgegeven aan EndQuery-.
De kernruntime valideert het volgende:
BeginQuery- kan niet worden aangeroepen voor een tijdstempelquery.
Voor de querytypen die ondersteuning bieden voor zowel BeginQuery- als EndQuery- (met uitzondering van tijdstempel), mag een query voor een bepaald element niet de grenzen van de opdrachtlijst omvatten.
ElementIndex- moet binnen het bereik vallen.
Het querytype is een geldig lid van de D3D12_QUERY_TYPE opsomming.
Het querytype moet compatibel zijn met de query-heap. In de volgende tabel ziet u het query-heap-type dat is vereist voor elk querytype:
Querytype Query heap-type D3D12_QUERY_TYPE_OCCLUSION D3D12_QUERY_HEAP_TYPE_OCCLUSION D3D12_QUERY_TYPE_BINARY_OCCLUSION D3D12_QUERY_HEAP_TYPE_OCCLUSION D3D12_QUERY_TYPE_TIMESTAMP D3D12_QUERY_HEAP_TYPE_TIMESTAMP D3D12_QUERY_TYPE_PIPELINE_STATISTICS D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 D3D12_QUERY_HEAP_TYPE_SO_STATISTICS D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 D3D12_QUERY_HEAP_TYPE_SO_STATISTICS D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 D3D12_QUERY_HEAP_TYPE_SO_STATISTICS D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 D3D12_QUERY_HEAP_TYPE_SO_STATISTICS Het querytype wordt ondersteund door het type opdrachtlijst. In de volgende tabel ziet u welke query's worden ondersteund op welke opdrachtlijsttypen.
Querytype Ondersteunde typen opdrachtenlijsten D3D12_QUERY_TYPE_OCCLUSION Rechtstreeks D3D12_QUERY_TYPE_BINARY_OCCLUSION Rechtstreeks D3D12_QUERY_TYPE_TIMESTAMP Direct, Compute en optioneel kopiëren D3D12_QUERY_TYPE_PIPELINE_STATISTICS Rechtstreeks D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 Rechtstreeks D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 Rechtstreeks D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 Rechtstreeks D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 Rechtstreeks
Gegevens extraheren uit een query
De manier om gegevens uit een query te extraheren, is door de methode ResolveQueryData te gebruiken. ResolveQueryData- werkt met alle geheugentypen (of het nu systeemgeheugen of lokaal geheugen van het apparaat zijn), maar vereist dat de doelresource zich in D3D12_RESOURCE_STATE_COPY_DESTbevindt.
Verwante onderwerpen
- tellers en query's
- overzicht van predicatiequery's