2016-04-22 2 views
1

Microsoft fournit un list expliquant les sémantiques d'entrée et de sortie des vertex et des pixel shaders. À présent, j'ai vu des exemples de code qui n'utilisent pas les types de données documentés. Ils utilisent float3 comme entrée COLOR pour le pixel shader ou float2 comme entrée POSITION pour le vertex shader. Même si une position à 2 composants ou une couleur 3 composants font sens pour moi, je ne trouve pas cette documentation, ce qui me fait me demanderQuelles tailles de type puis-je utiliser pour des sémantiques spécifiques

  • Puis-je utiliser float3 comme entrée de vertex shaders POSITION (si je sais que je n'utiliserai pas le composant W) sans s'attendre à des erreurs? Si je peux utiliser d'autres types de données que ceux documentés, existe-t-il une liste qui affiche tous les types de données autorisés pour une sémantique ou une règle du genre "Tant que le type de données utilisé est plus petit ou égal au documenté, vous pouvez l'utiliser "?


exemples de code ne suit pas la documentation:

StackOverflow - Passing colors through a pixel shader in HLSL

C++/DirectX11 Tutorials - S02E05 - Creating and loading Shaders à 9:33

Répondre

1

Dans le modèle de shaders 4.0 et versions ultérieures (DX10 +), les seuls noms sémantiques matter sont des sémantiques de valeur système (celles préfixées par SV_). D'autres sémantiques n'ont pas de traitement spécial, mis à part leur utilisation pour faire correspondre les paramètres des shaders à leurs entrées. La documentation concernant la sémantique telle que COLOR étant float4 est purement conventionnelle, ou héritée de DX9. Dans DX10/SM4 +, rien ne vous empêche de déclarer COLOR comme float2, ou de décider d'utiliser UNICORN comme nom sémantique pour vos couleurs, mais ne soyez pas surpris si cela confond les autres développeurs (ou vous-même) en révisant le code dans le futur .

Pour répondre à votre question spécifique, oui vous pouvez utiliser n'importe quel type de données que vous voulez pour une sémantique non SV_, ou même inventer vos propres noms. Assurez-vous simplement d'utiliser des dénominations et des comptes de canaux cohérents entre les étapes et la déclaration de mise en page d'entrée.

+0

Ahh, c'est génial! Après avoir réfléchi, cela a du sens. Étant donné que la structure d'entrée du shader et la structure de sommet dans le code sont également structurées, DirectX copie simplement la structure brute sur le GPU et n'a donc pas besoin de connaître les tailles de composant spécifiques. Je vous remercie :) – Cubinator73