Question

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.

Was it helpful?

Solution

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.

OTHER TIPS

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);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top