2017-10-10 4 views
2

J'ai deux questions sur l'efficacité de glsl.quel étage de shader est plus effiace pour la transformation de la matrice

  1. Dans le pipeline de nuanceur entièrement défini par l'utilisateur

    vs -> tcs -> TES -> gs -> fs

    les 4 premières étapes peuvent être utilisées pour l'opération comme ceci:

    gl_Position = MPV_matrices * vec4(in_pos, 1); 
    

    Quelle étape est plus efficace pour cela? Est-ce matériel ou version dépendante?

  2. De nombreux tutoriels sur l'utilisation GLSL montrent des exemples qui passent une position de sommet entre les shaders au lieu d'utiliser seule variable gl_Position en construction.

    Cela a-t-il un sens en termes d'efficacité?

Merci!

Répondre

1
  1. Ces Transforms sont couramment utilisés dans VS

    C'est parce que la géométrie et teselation ne sont pas généralement utilisés pour les shaders de base. Et en Fragment, cela signifierait que vous devez multiplier par fragment, ce qui est beaucoup plus fréquent que dans le vertex, donc les performances diminuent ... Donc les gens sont habitués à placer de telles transformations dans VS et n'y pensent pas trop.

  2. entrée personnalisée/variables de sortie

    Nous devons parfois vertex dans plus d'un système de coordonnées et il est généralement plus rapide d'utiliser interpolateurs inbuild que de transformation sur base par fragment.

    Par exemple, j'ai parfois besoin de 3 systèmes de coordonnées à la fois (écran, monde, TBN) pour les calculs appropriés dans FS.

    Une autre chose à considérer est la précision voir:

+0

Votre raisonnement est complètement, vous ne pouvez pas écrire, ni lire 'gl_Position' dans shader fragment stage, 'gl_Position' est utilisé par les étapes de la fonction fixe (assemblage primitif, écrêtage, sélection et rastérisation) qui se passe * avant * (et ** peut-être ** conduit à) fragment shader e xecution. En ce qui concerne "l'efficacité" sur les GPU modernes, d'un point de vue * matériel * il n'y a pas de différence inhérente entre par exemple. faire des choses dans un sommet vs un fragment de shader en dehors de la considération évidente de faire des choses par sommet vs les faire par fragment. –