Le chiamate di disegno vengono eseguite in parallelo o in sequenza o entrambe?


8

Questo è il seguito di una domanda a cui ho risposto su GameDev SE. La domanda era semplicemente : glDrawArraysInstanced in OpenGL è parallelo quando si disegnano tali istanze?

La mia risposta era nelle righe di "la GPU potrebbe eseguire più chiamate di disegno in parallelo a seconda di più cose, ad esempio se due chiamate di disegno utilizzano gli stessi shader di vertici". Ecco la risposta completa .

Nei commenti l'OP ha menzionato "Penso che dovrebbe essere sequenziale. Dopotutto, alcune modalità di fusione dipendono dalla sequenza"

Ora sono un po 'confuso. La mia risposta sarà ancora li parallelizzerà quando può essere valido? Qualcuno può chiarire questo?

Risposte:


9

Il risultato dovrebbe essere come se fosse eseguito in sequenza un triangolo alla volta. Questo è importante affinché ogni fotogramma sia deterministico. In caso contrario, disegnare più volte lo stesso fotogramma potrebbe creare risultati diversi e creare un'immagine tremolante sullo schermo.

Tuttavia ciò non significa che la parallelizzazione sia impossibile . I vertici possono essere calcolati in parallelo. I loro risultati verranno ordinati e inviati al rasterizzatore che alimenterà lo stadio shader dei frammenti.

Lo stesso accade con i pixel. In genere un gruppo di pixel di un triangolo può essere calcolato in parallelo e miscelato. Un triangolo non sovrapposto può quindi essere riempito contemporaneamente, tuttavia se il triangolo si sovrappone a uno attualmente occupato, il risultato dello shader di frammento deve essere bufferizzato fino a quando i pixel corrispondenti del triangolo precedente vengono eseguiti in modo che la fusione possa avvenire nell'ordine corretto.


È del tutto possibile eseguire contemporaneamente il pixel shader per triangoli sovrapposti. Tutto ciò che conta è che la fusione avvenga in sequenza. I pixel shader possono dare molto lavoro all'unità di fusione in qualsiasi ordine, che può quindi riordinare tutte quelle operazioni di fusione a seconda del triangolo da cui proviene.
John Calsbeek,

Ho visto situazioni in cui si verificano sfarfallamenti a causa di più triangoli che si trovano sullo stesso piano, ma non ricordo se ciò è accaduto mentre la telecamera / il mondo / ecc. le trasformazioni erano statiche o se richiedevano movimento e ricalcolo. Questo è un caso limite, però.
JAB

@JAB Sembra che ti riferisca al combattimento con z . Questo di solito si verifica a causa del fatto che anche se due primitive sono analiticamente complanari, la quantizzazione nell'interpolatore produce uno schema in cui sono visibili alcuni pixel di entrambi i primitivi. Il motivo si sposterà, causando sfarfallio, solo se i vertici (o la videocamera) vengono spostati, altrimenti il ​​motivo di interferenza dovrebbe essere coerente tra i fotogrammi.
MooseBoys,

@MooseBoys Esatto, sì. Sono passati alcuni anni da quando ho fatto molto con la grafica 3D.
JAB

Oltre a eseguire più vertici e pixel in parallelo, è anche possibile che più chiamate di disegno siano in volo contemporaneamente, se sono disponibili risorse GPU sufficienti e non vi è alcuna dipendenza tra le chiamate di disegno.
Nathan Reed,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.