In entrambe le condutture di rendering OpenGL e Direct3D, lo shader della geometria viene elaborato dopo il vertex shader e prima dello shader di frammento/pixel. Ora ovviamente elaborando lo shader della geometria dopo che il frammento/pixel shader non ha senso, ma quello che mi chiedo è perché non metterlo prima del vertex shader?Perché lo shader della geometria viene elaborato dopo il vertex shader?
Da un punto di vista software/di alto livello, almeno sembra avere più senso in questo modo: prima si esegue lo shader della geometria per creare tutti i vertici desiderati (e si esegue il dump di tutti i dati rilevanti per lo shader della geometria) , quindi esegui il vertex shader su tutti i vertici così creati. C'è un ovvio inconveniente nel fatto che il vertex shader deve ora essere eseguito su ciascuno dei vertici appena creati, ma qualsiasi logica che deve essere eseguita lì, nelle condotte attuali, deve essere eseguita per ogni vertice nello shader della geometria presumibilmente; quindi non c'è molto di un colpo di prestazioni lì.
Suppongo, dal momento che lo shader della geometria si trova in questa posizione in entrambe le condotte, che c'è un motivo hardware o un motivo di pipeline non ovvio che abbia più senso.
(Sono consapevole del fatto che il collegamento di poligoni deve aver luogo prima di eseguire uno shader di geometria (probabilmente non se prende punti singoli come input?) Ma so anche che deve essere eseguito dopo lo shader di geometria, quindi non lo farebbe Ha ancora senso eseguire il vertex shader tra quelle fasi?)
Se ti piace il nome o meno, il problema con _primitive shader_ è che l'abbreviazione '' PS'' sarebbe ambigua con _pixel shader_. '' GS'' (geometria shader) è almeno distinto da '' PS'' (pixel shader), '' VS'' (vertex shader), '' HS'' (shader shader), '' DS'' (domain shader), e '' CS'' (shader di calcolo). –
@ChuckWalbourn: Sì, il che mi riporta alla mia conclusione .. se avessero chiamato gli shader dei frammenti di Pixel Shader saremmo stati molto meglio. OpenGL ha una proprietà davvero piacevole che ogni fase shader prende il nome dai dati che emette (ad eccezione di Geometry Shader, ma stavano seguendo il comando di Microsoft). D3D nomina alcuni shader dopo il loro output, alcuni dopo il loro input, altri non descrittivamente. –