Sign in to follow this  
muhkuh

HLSL ps_3_0 compilation problem

Recommended Posts

Hi there, I've written a pixel shader for SM 3.0 hardware that uses all 10 allowed input registers. The problem is that the HLSL compiler fails to compile it for ps_3_0 telling me register v10 exceeds the maximum input register allowed v9. I used the compile target ps_3_sw and looked at the code. It seems the compiler uses input registers from v1 to v10. Shouldn't it be v0 to v9? I copied the shader assembler code and corrected it manually. The resulting code ran fine on my GF6. Is it me or the compiler? Is there anyone with the same problems? Markus

Share this post


Link to post
Share on other sites
Could somebody check this test case as I want to be sure there's nothing wrong with my installation? The example should compile as is as SM 2.0. When setting VS_TARGET to vs_3_0 and PS_TARGET to ps_3_0 it gives an error stating register v10 is not available.

BTW: What's the right place to send bug reports to Microsoft regarding this issue? directx@microsoft.com ?

Thanks


float4x4 worldViewProj : WorldViewProjection;


//------------------------------------
struct vertexInput
{
float3 position : POSITION;
float4 texCoordDiffuse : TEXCOORD0;
};

struct vertexOutput
{
float4 hPosition : POSITION;
float4 tex0 : COLOR0;
float4 tex1 : COLOR1;
float4 tex2 : TEXCOORD0;
float4 tex3 : TEXCOORD1;
float4 tex4 : TEXCOORD2;
float4 tex5 : TEXCOORD3;
float4 tex6 : TEXCOORD4;
float4 tex7 : TEXCOORD5;
float4 tex8 : TEXCOORD6;
float4 tex9 : TEXCOORD7;
};

float f1=1.4;
float f2=2.4;
float f3=3.4;
float f4=4.4;
float f5=5.4;
float f6=6.4;
float f7=7.4;
float f8=8.4;
float f9=9.4;

//------------------------------------
vertexOutput VS_TransformAndTexture(vertexInput IN)
{
vertexOutput OUT;
OUT.hPosition = mul( float4(IN.position.xyz , 1.0) , worldViewProj);
OUT.tex0 = IN.texCoordDiffuse;
OUT.tex1 = f1*IN.texCoordDiffuse;
OUT.tex2 = f2*IN.texCoordDiffuse;
OUT.tex3 = f3*IN.texCoordDiffuse;
OUT.tex4 = f4*IN.texCoordDiffuse;
OUT.tex5 = f5*IN.texCoordDiffuse;
OUT.tex6 = f6*IN.texCoordDiffuse;
OUT.tex7 = f7*IN.texCoordDiffuse;
OUT.tex8 = f8*IN.texCoordDiffuse;
OUT.tex9 = f9*IN.texCoordDiffuse;

return OUT;
}



#define VS_TARGET vs_2_0
#define PS_TARGET ps_2_0

//-----------------------------------
float4 PS_Textured( vertexOutput IN): COLOR
{
return IN.tex0+IN.tex1+IN.tex2+IN.tex3+IN.tex4+IN.tex5+IN.tex6+IN.tex7+IN.tex8+IN.tex9;
}


//-----------------------------------
technique test
{
pass p0
{
VertexShader = compile VS_TARGET VS_TransformAndTexture();

PixelShader = compile PS_TARGET PS_Textured();
}
}


technique test_assembly
{
pass p0
{
VertexShader = compile vs_3_0 VS_TransformAndTexture();

PixelShader = asm {
ps_3_0
dcl_texcoord0 v1
dcl_texcoord1 v2
dcl_texcoord2 v3
dcl_texcoord3 v4
dcl_texcoord4 v5
dcl_texcoord5 v6
dcl_texcoord6 v7
dcl_texcoord7 v8
dcl_texcoord8 v9
dcl_texcoord9 v0
mov r0, v1
add r0, r0, v2
add r0, r0, v3
add r0, r0, v4
add r0, r0, v5
add r0, r0, v6
add r0, r0, v7
add r0, r0, v8
add r0, r0, v9
add oC0, r0, v0
};
}
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this