views:

428

answers:

2
float4x4 matInvViewProj;

float4 GetPointPosition(float2 Tex0)
{
    float4 PosImageSpace;
    PosImageSpace.xy = float2(Tex0*2-1);
    PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r;
    return mul(PosImageSpace,matInvViewProj);
}

That's a part of my pixelshader. Why is there a compiler error? I'm compiling it in ps_3_0. Without the mul() it compiles.

A: 

Ahh, I guess that makes sense. Since the w componenet is not initialized, the mul() function will fail.

To avoid it you could initialize your vector as follows:

float4 PosImageSpace = (float4)0;

I will still recommend you to try compiling your shader using fxc in debug mode, as you can get much better error descriptions that way. You can even set up a custom build step that lets you right click the .fx file and compile it without having to compile the entire solution/project.

To compile the shader using fxc in a debug configuration:

fxc /Od /Zi /T fx_3_0 /Fo Directional_Lighting_Shader_Defaul.fxo Directional_Lighting_Shader_Defaul.fx

You can find fxc in C:\Program Files\Microsoft DirectX SDK\Utilities\bin

To set up a custom build step in Visual Studio check this sample from the DirectX SDK and also check this site

Also check this article on msdn about using fxc.

Tchami
A: 

That's weird: I added this line:

PosImageSpace.w = 0.0f;

and now it compiles well. That's how it looks now:

float4x4 matInvViewProj;

float4 GetPointPosition(float2 Tex0)
{
    float4 PosImageSpace;
    PosImageSpace.xy = float2(Tex0*2-1);
    PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r;
    PosImageSpace.w = 0.0f;
    return mul(PosImageSpace,matInvViewProj);
}
gufftan
I updated my answer with a bit more information. It was just easier than writing it all in a comment :)
Tchami