Original Post
Currently, i have two techniques setup for my skinned mesh, one using straight Diffuse texturing, and one using Normal Mapping. I want to be able to toggle between these techniques during runtime. My model contains the following attributes in the vertex buffer
float3 Position
float2 TexCoord
float3 Normal
float4 Tangent
float4 Weights
float4 Bones
Then i have my vertex shader input setup as such
now if i run the normal mapped technique, all works fine, and looks correct. However, if i run it without normal mapping ( I Don't define the preprocessor definition NORMALMAP), i get an error message as follows from Direct3D in the output window
D3D11: ERROR: ID3D11DeviceContext::DrawIndexed: Input Assembler - Vertex Shader linkage error: Signatures between stages are incompatible. Semantic 'Weights' is defined for mismatched hardware registers between the output stage and input stage. [ EXECUTION ERROR #343: DEVICE_SHADER_LINKAGE_REGISTERINDEX ]
D3D11: ERROR: ID3D11DeviceContext::DrawIndexed: Input Assembler - Vertex Shader linkage error: Signatures between stages are incompatible. Semantic 'Bones' is defined for mismatched hardware registers between the output stage and input stage. [ EXECUTION ERROR #343: DEVICE_SHADER_LINKAGE_REGISTERINDEX ]
Now when i view it in PIX, i see that the Tangent values are being passed thru to the vertex shader even though they are not supposed to be. I am under the impression that i can define my vertex buffer to have as many elements in it as i want, and inside the vertex shader using Semantics, i can tell the shader which ones to use, and which ones not to use (map to certain registers, etc...), although this doesn't seem to be the case that i am experiencing.
Would appreciate any help
float3 Position
float2 TexCoord
float3 Normal
float4 Tangent
float4 Weights
float4 Bones
Then i have my vertex shader input setup as such
struct GeometryVSIn {
float3 position : Position;
float2 texCoord : TexCoord;
float3 normal : Normal;
#ifdef NORMALMAP
float4 tangent : Tangent;
#endif
#ifdef SKINNED
float4 weights : Weights;
float4 bones : Bones;
#endif
};
now if i run the normal mapped technique, all works fine, and looks correct. However, if i run it without normal mapping ( I Don't define the preprocessor definition NORMALMAP), i get an error message as follows from Direct3D in the output window
D3D11: ERROR: ID3D11DeviceContext::DrawIndexed: Input Assembler - Vertex Shader linkage error: Signatures between stages are incompatible. Semantic 'Weights' is defined for mismatched hardware registers between the output stage and input stage. [ EXECUTION ERROR #343: DEVICE_SHADER_LINKAGE_REGISTERINDEX ]
D3D11: ERROR: ID3D11DeviceContext::DrawIndexed: Input Assembler - Vertex Shader linkage error: Signatures between stages are incompatible. Semantic 'Bones' is defined for mismatched hardware registers between the output stage and input stage. [ EXECUTION ERROR #343: DEVICE_SHADER_LINKAGE_REGISTERINDEX ]
Now when i view it in PIX, i see that the Tangent values are being passed thru to the vertex shader even though they are not supposed to be. I am under the impression that i can define my vertex buffer to have as many elements in it as i want, and inside the vertex shader using Semantics, i can tell the shader which ones to use, and which ones not to use (map to certain registers, etc...), although this doesn't seem to be the case that i am experiencing.
Would appreciate any help