[résolu] Probleme de shader model

Salut,

je développe un shader tout bête, en SM3.0:

[code]struct PS_Input {
float2 Tex : TEXCOORD0;
float2 ProjPos : VPOS;
};

float4 PostProcessPSTVization( PS_Input InputParam ) : COLOR0
{
float4 Color;

Color = tex2D( g_samSrcColor, InputParam.Tex.xy);	
float IsPair = fmod(InputParam.ProjPos.y,2);

Color.r = Color.r * IsPair;
Color.g = Color.g * IsPair;
Color.b = Color.b * IsPair;

return Color;

}

//-------------------------------------
// Technique: PostProcessTVization

technique PostProcessTVization
{
pass p0
{
VertexShader = null;
PixelShader = compile ps_3_0 PostProcessPSTVization();
ZEnable = false;
}
}[/code]

Je tente de faire tourner ça sous FXComposer, et j’ai une erreur comme quoi ce serait pas supporté par mon hardware, pourtant une 6600GT, qui supporte VS3.0 et PS3.0 …

Je comprends pas trop le problème, ça parle à quelqu’un ?

Eventuellement, si quelqu’un a un trick pour connaître la position du pixel projeté par le pixelshader sans utiliser les shader3.0 …

Je rajoute l’erreur que j’ai sous fx composer:

[code]HLSL_PostProcesses.fx: Failed to validate technique: PostProcessTVization; Invalid call

  • Check that the hardware supports the Vertex Shader & Pixel Shader profile you are using.
  • Device max profiles: vs_3_0, ps_3_0
  • If ps_3_0 pixel shader, make sure you have vs_3_0 too.
    Technique: PostProcessTVization Failed to validate on this hardware[/code]

On voit bien le souci du max profile qui semblerait normalement convenir au ps3.0 …

Et si tu vires la ligne VertexShader = null; ? ca donne quoi ? avec mon moteur de post process, si je mets ce genre de ligne, ca me fait un ecran tout noir :confused:

(désolé de répondre si tard, j’ai pas eu le mail d’avertissement de réponse au topic)

Alors effectivement, la technique compile si j’ajoute un vertex shader (je précise que dans le cas général, j’ai toujours null pour vertexshader et ca fonctionne impec. J’ai trouvé ça dans le SDK de directX, rayon Samples\C++\Direct3D\PostProcess ).
En fait, j’imagine que dans la mesure ou VPOS est censé indiqué les coordonnées du pixel que l’on texture, à la projection, ces coordonnées ne sont calculées que dans le cas d’un pipeline complet. Dans le mien, je me contente de passer un pixelshader sur une texture, qui est directement bindée sur mon buffer de sortie de rendu.

J’ai maintenant pas trouvé de vertexshader qui sont transparents pour mes coordonnées dans ce cas …

Et j’ai vraiment besoin de ce VPOS :confused:

c’est quoi le mode “pass through” du pixel shader 3 ?

ca veux dire qu’il va zaper le shader, et utiliser directement le setup engine et/ou le rasterizer, bien pratique si tu fais du rendu super simple (genre shadow map, ou tu as que du plein ou du vide, jmecomprennnds la B) ).
Le pass through sur le pixel shader et souvent supporte, mais sur le vertex shader pas forcement, car toute les GPU n’ont pas de pipelines fixes (a l’ancienne, sans vertex/pixel shader)… donc voila!

Merci B)

j’avais un peu pigé le principe mais j’ai extremement du mal à le mettre en place. Je zapperai vraiment bien le vs dans mon contexte.
J’ai vu passer un POSITIONT mais je trouve vraiment pas bcp de doc là dessus …

Je l’ai jamais vu utiliser pour du full screen, specialement si tu as besoin de VPos… en meme temps je peux me tromper!

sigh

Ok, merci.

Résolu B)

http://www.developpez.net/forums/showthrea…101#post2620101