enumerazione D3D10DDI_QUERY (d3d10umddi.h)
Il tipo di enumerazione D3D10DDI_QUERY contiene valori che identificano un tipo di query.
Sintassi
typedef enum D3D10DDI_QUERY {
D3D10DDI_QUERY_EVENT,
D3D10DDI_QUERY_OCCLUSION,
D3D10DDI_QUERY_TIMESTAMP,
D3D10DDI_QUERY_TIMESTAMPDISJOINT,
D3D10DDI_QUERY_PIPELINESTATS,
D3D10DDI_QUERY_OCCLUSIONPREDICATE,
D3D10DDI_QUERY_STREAMOUTPUTSTATS,
D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE,
D3D11DDI_QUERY_PIPELINESTATS,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM1,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM2,
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM3,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM0,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2,
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3,
D3D10DDI_COUNTER_GPU_IDLE,
D3D10DDI_COUNTER_VERTEX_PROCESSING,
D3D10DDI_COUNTER_GEOMETRY_PROCESSING,
D3D10DDI_COUNTER_PIXEL_PROCESSING,
D3D10DDI_COUNTER_OTHER_GPU_PROCESSING,
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION,
D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION,
D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION,
D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION,
D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION,
D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED,
D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED,
D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED,
D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED,
D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED,
D3D10DDI_COUNTER_PIXELSHADER_COMPUTATION_LIMITED,
D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE,
D3D10DDI_COUNTER_TEXTURE_CACHE_HIT_RATE,
D3D10DDI_COUNTER_DEVICE_DEPENDENT_0
} ;
Costanti
D3D10DDI_QUERY_EVENT Questo tipo di query fornisce una primitiva di sincronizzazione che molti dei tipi di query seguenti simulano per gestire la natura asincrona dell'unità di elaborazione grafica (GPU). Un D3D10DDI_QUERY_EVENT emesso viene segnalato dopo che la GPU è stata completata con tutti i comandi rilasciati in precedenza, in genere dal back-end della pipeline grafica. I dati associati al driver a questo tipo di query sono bool. Tuttavia, il valore BOOL è ridondante perché ogni volta che viene segnalata una query D3D10DDI_QUERY_EVENT, il valore di BOOL è sempre TRUE. Il driver deve sempre restituire il valore dei dati BOOL impostato su TRUE durante la segnalazione del D3D10DDI_QUERY_EVENT. |
D3D10DDI_QUERY_OCCLUSION I dati statistici associati dal driver a questo tipo di query sono UINT64. Questi dati statistici contengono il numero di multicampionamento che hanno superato il test di profondità e stencil, noti anche come multicampionamento "visibile", per tutte le primitive dopo la creazione del contesto di dispositivo. Se la destinazione di rendering non è multicampionata, il contatore viene incrementato del numero di pixel interi visibili. Il contatore deve essere disposto intorno quando viene eseguito l'overflow. NOTA Il runtime Direct3D può chiamare la funzione QueryGetData del driver in qualsiasi momento per richiedere questi dati statistici. Pertanto, deve essere calcolato continuamente in modo accurato. |
D3D10DDI_QUERY_TIMESTAMP I dati associati dal driver a questo tipo di query sono UINT64. Il tipo di query TIMESTAMP viene usato in modo analogo al tipo di query D3D10DDI_QUERY_EVENT perché il tipo di query TIMESTAMP fornisce anche un tipo di primitiva di sincronizzazione. Come D3D10DDI_QUERY_EVENT, TIMESTAMP dovrebbe essere segnalato quando la GPU viene completata con tutti i comandi rilasciati in precedenza. Tuttavia, TIMESTAMP è diverso da D3D10DDI_QUERY_EVENT restituendo un valore timestamp a 64 bit. Questo valore timestamp a 64 bit deve essere campionato da un contatore GPU, che incrementa a una frequenza coerente. Il valore di timestamp deve essere campionato all'istante in cui la GPU è terminata con tutti i comandi rilasciati in precedenza. La GPU non è necessaria per assicurarsi che tutte le cache vengano scaricate in memoria per determinare che il lavoro è completato. In questo modo, la soddisfazione di più tipi di query TIMESTAMP ad alta frequenza non disturba pesantemente la pipeline. Tuttavia, la CPU deve monitorare l'ordinamento di scrittura della memoria ben definito tra se stesso e la GPU, soprattutto quando D3D10DDI_QUERY_EVENT è supportato. Se la CPU dovesse determinare che la GPU ha scritto un determinato valore (in particolare un valore di isolamento), la CPU determinerebbe che tutte le scritture di memoria precedenti rilasciate prima della scrittura di isolamento devono essere scaricate in memoria e in grado di essere visualizzate immediatamente dalla CPU. Il tipo di scaricamento che potrebbe essere necessario per ottenere i dati dalle cache GPU e nella memoria accessibile dalla CPU non deve essere eseguita ogni TIMESTAMP, ma probabilmente più alla fine di ogni buffer di comando. La frequenza del contatore timestamp viene fornita nel contesto di un tipo di query D3D10DDI_QUERY_TIMESTAMPDISJOINT. La frequenza di questo contatore deve essere maggiore di 10 MHz e resistente alla limitazione dinamica ad alta frequenza della GPU. Il contatore timestamp deve essere globale. Di conseguenza, il contatore timestamp non è necessario per tenere conto dello slicing temporale della GPU dei contesti. Il valore iniziale del contatore timestamp non è specificato. Pertanto, il valore assoluto del contatore timestamp è in genere privo di significato da solo. Tuttavia, il valore relativo generato dalla differenza di due valori assoluti quantifica un periodo di tempo trascorso. La differenza di due valori di timestamp è accurata solo quando le due query TIMESTAMP sono racchiuse tra parentesi all'interno di un intervallo D3D10DDI_QUERY_TIMESTAMPDISJOINT e quando il valore query-disgiunto della query D3D10DDI_QUERY_TIMESTAMPDISJOINT restituisce FALSE. |
D3D10DDI_QUERY_TIMESTAMPDISJOINT I dati associati dal driver a questo tipo di query sono una struttura D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT . TIMESTAMPDISJOINT consente a un'applicazione di definire una parentesi per richiedere non solo la frequenza dell'orologio TIMESTAMP, ma anche di rilevare se tale frequenza è coerente nell'intero intervallo di comandi grafici tra parentesi quadre. Il membro Disjoint di D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT contiene un valore BOOL che indica quando un elemento ha causato la discontinuità o la disgiunzione del contatore timestamp. Alcuni esempi di eventi che devono attivare TIMESTAMPDISJOINT sono un'alimentazione inattiva, la limitazione delle richieste a causa di eventi di risparmio energia del portatile, un cavo AC scollegato e il surriscaldamento. Tali occorrenze di eventi devono essere abbastanza rare durante uno stato di esecuzione costante dell'applicazione grafica da evitare controllando l'ambiente di esecuzione del sistema. Si noti che, se si verificano questi eventi, riducono efficacemente l'utilità della funzionalità TIMESTAMP. Le query TIMESTAMP dopo un evento che attiverebbe una query TIMESTAMPDISJOINT non dovrebbero essere significative rispetto alle query TIMESTAMP precedenti a tale evento. Il valore BOOL nel membro Disjoint è TRUE se non è garantito che i valori delle query TIMESTAMP siano continui per tutta la durata della query TIMESTAMPDISJOINT. In caso contrario, Disjoint deve essere FALSE. Il valore del membro Frequency di D3D10_DDI_QUERY_DATA_TIMESTAMP_DISJOINT deve essere uguale alla frequenza dell'orologio TIMESTAMP. Inoltre, le notifiche di tali eventi di limitazione sono utili per gli strumenti di monitoraggio delle prestazioni, regressione e analisi, presupponendo che le notifiche comportino differenze di prestazioni nell'esecuzione dell'applicazione. |
D3D10DDI_QUERY_PIPELINESTATS Per ulteriori informazioni, vedere Note. |
D3D10DDI_QUERY_OCCLUSIONPREDICATE I dati associati al driver a questo tipo di query sono bool. Questo predicato rispecchia la specifica per la query OCCLUSION. Se la query OCCLUSION per lo stesso intervallo tra parentesi quadre restituisce 0, il predicato OCCLUSION restituisce FALSE. In caso contrario, il predicato OCCLUSION restituisce TRUE, che indica che almeno un multisample è visibile. Se il predicato è stato indicato come hint o garantito, non viene mai propagato alcun risultato all'applicazione. Questo tipo di query è un predicato e può essere usato per predicare i comandi di rendering. |
D3D10DDI_QUERY_STREAMOUTPUTSTATS I dati associati al driver a questo tipo di query sono una struttura D3D10_DDI_QUERY_DATA_SO_STATISTICS . Questa struttura contiene statistiche per il monitoraggio della quantità di dati trasmessi nella fase di output del flusso della pipeline. Queste statistiche conteggiano solo primitive complete (ad esempio, punti, linee e triangoli) che vengono trasmessi. Se il tipo primitivo cambia (ad esempio, linee in triangoli), il conteggio non viene modificato in alcun modo. Ovvero, il conteggio è sempre primitive totali, indipendentemente dal tipo. NOTA Il runtime Direct3D può chiamare la funzione QueryGetData del driver in qualsiasi momento per richiedere queste statistiche. Pertanto, deve essere calcolato continuamente in modo accurato. |
D3D10DDI_QUERY_STREAMOVERFLOWPREDICATE I dati associati al driver a questo tipo di query sono bool. Questo valore BOOL è TRUE se un output del flusso ha superato il flusso. Se due query D3D10DDI_QUERY_STREAMOUTPUTSTATS venivano usate per monitorare contemporaneamente lo stesso intervallo tra parentesi quadre di un tipo di predicato STREAMOVERFLOWPREDICATE, la differenza nei valori nei membri PrimitivesStorageNeeded di D3D10_DDI_QUERY_DATA_SO_STATISTICS avrebbe comportato una differenza maggiore rispetto alla differenza nei valori nei membri NumPrimitivesWritten . STREAMOVERFLOWPREDICATE non supporta la possibilità di essere usata come hint. Pertanto, il tipo di predicato deve essere garantito. Questa query è un predicato e può essere usata per predicare i comandi di rendering, che impedisce la visualizzazione di un frame indesiderato all'applicazione. In caso di streaming in più buffer contemporaneamente, non appena uno di essi esegue l'overflow, l'output del flusso scrive arresta per tutti i buffer e i dati per STREAMOVERFLOWPREDICATE diventa TRUE. |
D3D11DDI_QUERY_PIPELINESTATS Supportato in Windows 7 e versioni successive. I dati associati dal driver a questo tipo di query sono una struttura D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS. Questa struttura contiene statistiche per ogni fase della pipeline grafica. Questo tipo di query è lo stesso del tipo di query D3D11DDI_QUERY_PIPELINESTATS tranne D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS aggiunge membri HSInvocations e DSInvocations per hull e domain shader. |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM0 Supportato in Windows 7 e versioni successive. I dati associati al driver a questo tipo di query sono una struttura D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 Supportato in Windows 7 e versioni successive. I dati associati al driver a questo tipo di query sono una struttura D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM2 Supportato in Windows 7 e versioni successive. I dati associati al driver a questo tipo di query sono una struttura D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOUTPUTSTATS_STREAM3 Supportato in Windows 7 e versioni successive. I dati associati al driver a questo tipo di query sono una struttura D3D10_DDI_QUERY_DATA_SO_STATISTICS . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM0 Supportato in Windows 7 e versioni successive. I dati associati al driver a questo tipo di query sono bool. Questo valore BOOL è TRUE se l'output del flusso 0 ha superato il flusso. Se due query D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM0 venivano usate per monitorare simultaneamente lo stesso intervallo tra parentesi quadre di un tipo predicato STREAMOVERFLOWPREDICATE_STREAM0, la differenza nei valori nei membri PrimitivesStorageNeeded di D3D10_DDI_QUERY_DATA_SO_STATISTICS avrebbe comportato una differenza maggiore rispetto alla differenza nei valori nei membri NumPrimitivesWritten . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM1 Supportato in Windows 7 e versioni successive. I dati associati al driver a questo tipo di query sono bool. Questo valore BOOL è TRUE se l'output del flusso 1 ha superato il flusso. Se due query D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 sono state usate per monitorare simultaneamente lo stesso intervallo tra parentesi quadre di un tipo predicato STREAMOVERFLOWPREDICATE_STREAM1, la differenza nei valori nei membri PrimitivesStorageNeed di D3D10_DDI_QUERY_DATA_SO_STATISTICS avrebbe generato una differenza maggiore rispetto alla differenza dei valori nei membri NumPrimitivesScritti . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM2 Supportato in Windows 7 e versioni successive. I dati associati al driver a questo tipo di query sono un valore BOOL. Questo valore BOOL è TRUE se l'output del flusso 2 è sovraflow. Se due query D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 sono state usate per monitorare simultaneamente lo stesso intervallo tra parentesi quadre di un tipo predicato STREAMOVERFLOWPREDICATE_STREAM2, la differenza nei valori nei membri PrimitivesStorageNeed di D3D10_DDI_QUERY_DATA_SO_STATISTICS avrebbe comportato una differenza maggiore rispetto alla differenza dei valori nei membri NumPrimitivesScritti . |
D3D11DDI_QUERY_STREAMOVERFLOWPREDICATE_STREAM3 Supportato in Windows 7 e versioni successive. I dati associati al driver a questo tipo di query sono un valore BOOL. Questo valore BOOL è TRUE se l'output del flusso 3 è overflow. Se due query D3D10DDI_QUERY_STREAMOUTPUTSTATS_STREAM1 sono state usate per monitorare simultaneamente lo stesso intervallo tra parentesi quadre di un tipo predicato STREAMOVERFLOWPREDICATE_STREAM3, la differenza nei valori nei membri PrimitivesStorageNeeded di D3D10_DDI_QUERY_DATA_SO_STATISTICS avrebbe generato una differenza maggiore rispetto alla differenza dei valori nei membri NumPrimitivesScritti . |
D3D10DDI_COUNTER_GPU_IDLE I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di tempo di inattività della GPU. |
D3D10DDI_COUNTER_VERTEX_PROCESSING I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di tempo in cui il vertex shader è occupato nell'elaborazione dei dati. |
D3D10DDI_COUNTER_GEOMETRY_PROCESSING I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di tempo in cui lo shader geometry è occupato nell'elaborazione dei dati. |
D3D10DDI_COUNTER_PIXEL_PROCESSING I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di tempo in cui lo shader pixel è occupato nell'elaborazione dei dati. |
D3D10DDI_COUNTER_OTHER_GPU_PROCESSING I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di tempo per cui le operazioni della GPU, diverse dalle operazioni vertex, geometry e pixel shader, sono occupato nell'elaborazione dei dati. |
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di un massimo teorico di utilizzo della larghezza di banda dell'adattatore. |
D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di utilizzo teorico della larghezza di banda della memoria video. |
D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di utilizzo della velocità effettiva del vertice teorico. |
D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di un massimo teorico di utilizzo della velocità effettiva della configurazione del triangolo. |
D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di un massimo teorico di utilizzo della velocità effettiva della frequenza di riempimento. |
D3D10DDI_COUNTER_VERTEXSHADER_MEMORY_LIMITED I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di tempo in cui il vertex shader attende che la memoria esegua letture o scritture di dati (rispetto alla percentuale di tempo calcolata dal vertex shader matematico). |
D3D10DDI_COUNTER_VERTEXSHADER_COMPUTATION_LIMITED I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di tempo in cui il vertex shader calcola matematica (rispetto alla percentuale di tempo in cui il vertex shader attende che la memoria esegua letture o scritture di dati). |
D3D10DDI_COUNTER_GEOMETRYSHADER_MEMORY_LIMITED I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di tempo in cui il geometry shader attende che la memoria esegua letture o scritture di dati (rispetto alla percentuale di tempo calcolata dal geometry shader matematico). |
D3D10DDI_COUNTER_GEOMETRYSHADER_COMPUTATION_LIMITED I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di tempo in cui la geometria shader calcola matematica (rispetto alla percentuale di tempo in cui lo shader geometry attende l'esecuzione della memoria in lettura o scrittura dei dati). |
D3D10DDI_COUNTER_PIXELSHADER_MEMORY_LIMITED I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di tempo in cui il pixel shader attende che la memoria esegua letture o scritture di dati (rispetto alla percentuale di tempo calcolata dal pixel shader matematico). |
D3D10DDI_COUNTER_PIXELSHADER_COMPUTATION_LIMITED I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di tempo in cui il pixel shader calcola matematica (rispetto alla percentuale di tempo in cui lo shader pixel attende l'esecuzione della memoria in lettura o scrittura dei dati). |
D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di vertici recuperati dallo shader geometry o pixel shader da una cache di vertici già trasformati dal vertex shader. Una cache di vertici trasformati ,ovvero vertici a cui è stato eseguito il vertex shader, esiste immediatamente dopo il vertex shader. Questi vertici possono essere usati dal geometry shader o dal pixel shader. Una frequenza di hit del 100% (risultato di una query di D3D10DDI_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE) indica che ogni vertice necessario per lo shader geometry o pixel shader è già stato trasformato. Mentre una frequenza di hit del 0% indica che ogni vertice richiesto l'elaborazione dal vertex shader prima che possa essere usata. Il driver può ristrutturare algoritmi e dati per aumentare i tassi di successo della cache. |
D3D10DDI_COUNTER_TEXTURE_CACHE_HIT_RATE I dati associati al driver a questo tipo di contatore query sono un FLOAT32. Il driver restituisce la percentuale di texel o memoria trama recuperata da una cache di texel già recuperati dalla memoria video. Una cache di memoria trama può esistere tra la visualizzazione delle risorse shader o eventualmente il buffer e gli shader costanti. Una frequenza di hit del 100% indica che ogni texel necessario per uno shader era già disponibile nella cache. Mentre una frequenza di hit del 0% indica che ogni texel ha richiesto il recupero dei dati dalla memoria video. Il driver può ristrutturare algoritmi e dati per aumentare i tassi di successo della cache. |
D3D10DDI_COUNTER_DEVICE_DEPENDENT_0 Il primo contatore di query dipendente dal dispositivo disponibile. I fornitori di hardware possono usare questo valore e qualsiasi valore a 32 bit sopra 0x40000000 per un contatore di query per i propri dispositivi. |
Commenti
I valori per D3D10DDI_COUNTER_VERTEX_PROCESSING, D3D10DDI_COUNTER_GEOMETRY_PROCESSING, D3D10DDI_COUNTER_PIXEL_PROCESSING e D3D10DDI_COUNTER_OTHER_GPU_PROCESSING possono aggiungere fino a un valore definito dal driver, ovvero il numero di unità parallele rilevabili. Questo numero viene pubblicato dal driver come parte delle funzionalità della scheda grafica. Il numero di unità parallele rilevabili può essere 1, 2, 3 o 4 a seconda dei dettagli dell'architettura hardware, la capacità dei contatori delle prestazioni di distinguere dove il tempo è effettivamente trascorso o a discrezione completa del fornitore dell'hardware. Per le architetture che segnalano il numero di unità parallele rilevabili uguali a 1 (== 1) nel membro NumDetectableParallelUnits della struttura D3D10DDI_COUNTER_INFO in risposta a una chiamata alla funzione CheckCounterInfo , si applica l'equazione seguente:
(D3D10DDI_COUNTER_VERTEX_PROCESSING + D3D10DDI_COUNTER_GEOMETRY_PROCESSING + D3D10DDI_COUNTER_PIXEL_PROCESSING + D3D10DDI_COUNTER_OTHER_GPU_PROCESSING) / NumDetectableParallelUnits = 1,0 - D3D10DDI_COUNTER_GPU_IDLE
Il monitoraggio di tutti questi identificatori di contatore (insieme a D3D10DDI_COUNTER_GPU_IDLE) deve comunque rispettare le regole dei contatori attivi simultaneamente.
Per le architetture che segnalano il numero di unità parallele rilevabili non uguali a 1 (!= 1), l'interazione tra ogni metrica occupato è più complessa. Ad esempio, con il numero di unità parallele rilevabili uguali a 4 (== 4), D3D10DDI_COUNTER_VERTEX_PROCESSING e D3D10DDI_COUNTER_PIXEL_PROCESSING sono uguali a .25 (== .25), mentre il resto delle metriche occupato è uguale a 0 (== 0). D3D10DDI_COUNTER_GPU_IDLE potrebbe comportare un risultato compreso tra .5 e .75 a seconda della quantità effettiva di sovrapposizione ottenuta da queste unità parallele.
D3D10DDI_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION, D3D10DDI_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION, D3D10DDI_COUNTER_VERTEX_THROUGHPUT_UTILIZATION, D3D10DDI_COUNTER_TRISETUP_THROUGHPUT_UTILIZATION e D3D10DDI_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION tutti segnalano una percentuale di collo di bottiglia che può essere usata. Le applicazioni possono quindi determinare quando viene sottolineato un determinato massimo teorico in modo che possano determinare come aggirare il collo di bottiglia.
Dettagli per D3D10DDI_QUERY_PIPELINESTATS valore
I dati associati al driver a questo tipo di query sono una struttura D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS , che contiene statistiche per ogni fase della pipeline grafica. Per ogni fase, il valore per il numero di chiamate deve essere compreso tra la cache infinita e nessuna cache. Il clipper apparirà come il geometry shader (GS). Il clipper verrà eseguito per ogni triangolo. Per ogni chiamata, le primitive zero verranno generate se il triangolo originale viene completamente ritagliato, verrà generata una primitiva se il triangolo originale non viene ritagliato a tutti (o il ritaglio genera solo un triangolo), due primitive verranno generate se il triangolo originale è stato ritagliato e ha generato due triangoli e così via. Nelle configurazioni tipiche della pipeline, il valore nel membro GSPrimitives di D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS sarebbe uguale al valore nel membro CInvocations . Se la rasterizzazione è disabilitata e la pipeline è configurata solo per inviare primitive all'output di flusso, il valore in GSPrimitives devia dal valore in CInvocations perché CInvocations non incrementerebbe. Le statistiche di ritaglio saranno flessibili per quanto riguarda le implementazioni della banda di guardia. Pertanto, quando si esegue il rendering di triangoli che si estendono oltre il riquadro di visualizzazione, i test garantiranno la ritaglio tra un intervallo di valori (numeri che presuppongono una banda di guardia infinita e numeri che presuppongono un rettangolo di ritaglio stretto intorno al riquadro di visualizzazione). Tutti i valori contengono il numero di eventi dalla creazione del contesto del dispositivo. Si noti che queste statistiche possono essere richieste in qualsiasi momento, pertanto devono essere calcolate continuamente in modo accurato.
Solo la differenza tra due richieste statistiche indipendenti fornirà informazioni significative. Il driver deve calcolare la differenza tra i dati di statistica ricevuti quando si verifica una chiamata alla funzione QueryBegin e i dati di statistica ricevuti quando si verifica una chiamata alla funzione QueryEnd .
Di seguito sono riportati esempi dell'interazione tra i valori nella memorizzazione nella cache IAVertices, IAPrimitives e VSInvocations di D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS rispetto alla memorizzazione nella cache del vertex shader (VS).
Scenario | Valore valido IAVertices | Valore valido per IAPrimitives | VSInvocations valore valido |
---|---|---|---|
Disegnare una striscia di triangoli indicizzati di 4 primitive (con tutti gli indici lo stesso valore) | 6 | 4 | 1--12 |
Disegna un elenco di triangoli indicizzati di 4 primitive (con tutti gli indici lo stesso valore) | 12 | 4 | 1--12 |
Disegnare una striscia di triangoli di 4 primitive | 6 | 4 | 6--12 |
Disegnare un elenco di triangoli di 4 primitive | 12 | 4 | 6--12 |
Le primitive parziali saranno autorizzate a rientrare nell'intervallo di valori, in modo analogo al comportamento della memorizzazione nella cache dei vertici. Pertanto, quando sono possibili primitive parziali, le statistiche devono rientrare tra una pipeline che li ritaglia il prima possibile (prima anche che l'assembler di input (IA) li conta, o il più tardi possibile (post clipper e pre-pixel shader (PS)). Stream output e null GS sono flessibili per stabilire se effettivamente causano chiamate GS.
Per quanto riguarda il valore nel membro PSInvocations di D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS, le ottimizzazioni di profondità e stencil iniziali potrebbero o non impedire che il lavoro venga realizzato dal pixel shader. Pertanto, quando i pixel non superano un test di profondità, il valore in PSInvocations potrebbe o meno essere incrementato a seconda della posizione effettiva del test di profondità nella pipeline. Se la profondità del pixel shader restituisce una profondità, il valore in PSInvocations deve aumentare come previsto, anche se la profondità di output ha esito negativo. Nell'esempio seguente viene illustrato come verrà testato il valore in PSInvocations .
Si consideri il DSP (numero di pixel che superano i test di profondità e stencil) e DSF (numero di pixel che non superano il test di profondità o stencil) quantità . DSP equivale approssimativamente alla query OCCLUSION, ad eccezione del fatto che OCCLUSION misura più campioni (non pixel). In tutti i casi, DSP <= il valore in PSInvocations<= ( DSP + DSF ). Quando il pixel shader restituisce profondità, il valore in PSInvocations è la somma di DSP e DSF. Inoltre, quando un pixel shader NULL è associato alla pipeline, il valore in PSInvocations non aumenta.
Per quanto riguarda i valori in IAVertices e VSInvocations, l'elaborazione dei vertici adiacenti potrebbe essere ottimizzata se gs non dichiara i vertici di adiacenza come input per gs. Pertanto, quando gs non dichiara vertici adiacenti come input, i valori in IAVertices e VSInvocations potrebbero o meno riflettere il lavoro implicito nei vertici adiacenti. Se gs dichiara vertici adiacenti, il valore in IAVertices deve includere i vertici adiacenti (senza alcun riferimento alla memorizzazione nella cache post-VS) e il valore in VSInvocations deve includere i vertici adiacenti (insieme agli effetti della memorizzazione nella cache post-VS).
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile in Windows Vista e versioni successive dei sistemi operativi Windows. |
Intestazione | d3d10umddi.h (include D3d10umddi.h) |
Vedi anche
D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS