Sign in to follow this  
bmarci

Invalid values from VS

Recommended Posts

bmarci    786

Hi,

I'm trying to draw screen aligned quad with pre-transformed vertices and DrawPrimitiveUP.

Some weird is happening to the output values of the vertex shader:

 

Here are some samples:

 

The buffer consist of 4 vertices (screen corners) in the following format:

struct TVertex {
    float pos[3];
    float rhw;
    float uv[2];
};

The pos.xy are set to the screen corners, the pos.z is 0 and the rhw is 1. The UV members are 0,0/1,0/1,1/0,1

And drawing a trianglefan.

 

The vertex declaration is as follows:

const D3DVERTEXELEMENT9 dcl[]={
  {0,0, D3DDECLTYPE_FLOAT4,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_POSITIONT,0},
  {0,16,D3DDECLTYPE_FLOAT2,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_TEXCOORD,0},
  D3DDECL_END()
};

And a very simple shader to make the situation clear:

struct VSIn 
  float4 pos: POSITION;
  float2 uv: TEXCOORD;
};

struct VSOut {
  float4 pos: SV_POSITION;
  float4 spec: TEXCOORD0;
};

VSOut VSMain(VSIn input) {
  VSOut output;

  output.pos=input.pos;
  output.spec=float4(1,1,1,1);
  return output;
};

float4 PSMain(VSOut input): SV_TARGET {
  return input.spec;
};

I'd expect the whole screen to be white, but it's not!

It looks like the corners get these "spec" values:   (0,0,0,1) (1,0,0,1) (1,1,0,1) (0,1,0,1)

 

If I use a different register,

float4 spec: TEXCOORD1;

The whole screen is black, the input.spec value is (0,0,0,1)

 

The same shader works fine with "normal" projected transformation, but not with pre-transformed vertices.

 

What do I miss here??

 

Thanks for any help!

 

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