IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

[Débutant][D3D11]Vertex shader/pixel shader incompatibles


Sujet :

DirectX

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 217
    Points : 228
    Points
    228
    Par défaut [Débutant][D3D11]Vertex shader/pixel shader incompatibles
    Bonjour,

    Je débute en programmation graphique 3D (j'en avais déjà fait mais j'ai beaucoup oublié) avec Direct 3D 11 (même si je suis sous vista avec une carte d3d 10.1) et j'ai un petit problème avec les shaders que je n'arrive pas à corriger.
    Je dois l'avouer, je ne comprend pas grand chose à l'HLSL ce qui rend mon tripatouillage difficile: les sémantics et consorts forment une bouillie bizarre dans ma tête ...

    A l'éxécution le pilote me dit que la sorti du vertex shader n'est pas compatible avec l'entrée. ça je veux bien l'admettre mais je vois pas pourquoi ^^ .

    Voici mon vertex shader:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    struct PS_INPUT
    {
        float4 Pos: POSITION;
        float4 Color: COLOR0;
    };
     
    PS_INPUT main( float4 Pos: POSITION, float4 Col : COLOR0 )
    {
        PS_INPUT psInput;
        psInput.Pos = Pos;
        psInput.Color = Col;
        return psInput;
    }
    et le pixel shader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    struct PS_INPUT
    {
        float4 Pos : SV_POSITION;
        float4 Color : COLOR0;
    };
     
    float4 main( PS_INPUT psInput ) : SV_TARGET
    {
        return psInput.Color;
    }
    Ces shaders ne font aucun calculs, c'est juste pour débuter, mais ça pose déjà problème .

    J'implore votre aide, (et si quelqu'un pouvait m'aider à mieux comprendre ces trucs des semantics)...

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 92
    Points : 44
    Points
    44
    Par défaut
    tu as deux structure PS_INPUT.
    la première doit etre une VS_INPUT je suppose

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 217
    Points : 228
    Points
    228
    Par défaut
    En fait j'ai trouvé comment résoudre le problème (dans le vertex shader PS_INPUT:os devait avoir la sémantique SV_POSITION ) mais je comprend toujours très mal les sémantiques...

  4. #4
    Membre confirmé

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Points : 527
    Points
    527
    Par défaut
    Les sémantiques sont indispensables pour que le pilote détermine quelles informations font quoi (sinon, il ne verra qu'une bouille de bits: en théorie rien n'empêche de calculer la date d'anniversaire de tata Julie à chaque pixel, et même à chaque vertex, pour rire). Il n'y a pas de miracle, il faut se cogner la documentation, déjà en démarrant à DX11 vous avez de la chance de ne pas vous prendre le changement brutal des sémantiques entre DX9 et DX10 (ce changement est très bénéfique, mais c'est un changement).

    Pour revenir à votre code: le vertex shader peut fournir un flux au pixel shader (ce n'est pas nécessaire, mais n'embrouillons pas). Dans ce cas, il faut que le flux qui sort du VS soit déclaré du même type que celui du flux qui entre dans le PS. Votre sortie de VS est judicieusement appelée comme PS_INPUT. Votre entrée de PS est tout aussi judicieusement appelée PS_INPUT. C'est exactement ce que veut le pilote: la même structure en sortie du VS et en entrée du PS.
    En revanche, il est très moins judicieux de définir cette deux structure(s) ... différemment . Là, le pilote n'est pas content, et votre ruse bien tentée d'appeler deux structures différentes avec le même nom ne va pas réussir à tromper sa vigilance, surtout après compilation.
    Comme le PS a besoin d'une sémantique SV_POSITION, c'est bien sûr la deuxième version de PS_INPUT qui est la bonne.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 217
    Points : 228
    Points
    228
    Par défaut
    D'accord, mais pourquoi est-ce qu'il y a SV_POSITION et POSITION? J'ai l'impression que c'est complétement la même chose?

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 217
    Points : 228
    Points
    228
    Par défaut
    Je pense avoir compris maintenant pour les sémantiques, mais cette fois ci j'ai un autre problème: je voudrais faire la réflection d'un shader pour avoir quelques information en sup'...

    Je fais donc un D3DReflect(); mais le compilo me dit qu'il n'y a pas de GUID associé à l'interface ID3D11ShaderReflection !
    Je regarde dans d3d11shader.h et le GUID est défini!
    Je comprend pas trop là.

    Edit: en passant directement la valeur du GUID pour l'interface ID3D11ShaderReflection (présente dans d3d11shader.h) ça marche.

Discussions similaires

  1. "Programming Vertex, Geometry and Pixel Shaders" gratuitement
    Par Bakura dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 04/01/2009, 15h26
  2. utilisation judicieuse des vertex/pixel shader....
    Par conrad dans le forum DirectX
    Réponses: 8
    Dernier message: 03/03/2006, 11h59
  3. pixel shader 2.0
    Par trois_1 dans le forum DirectX
    Réponses: 3
    Dernier message: 20/10/2003, 15h39
  4. Vertex et Pixel Shader
    Par Riko dans le forum OpenGL
    Réponses: 2
    Dernier message: 06/06/2003, 16h45
  5. carte graphique et pixels shader
    Par yeeep dans le forum DirectX
    Réponses: 2
    Dernier message: 26/04/2003, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo