input-assembler.azsl 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. //////////////////////////////////////////////////////////////////////////////////////
  2. struct VertexInput1 {
  3. float3 m_position : POSITION;
  4. float m_color[4] : COLOR;
  5. };
  6. struct VertexOutput1 { float4 m_position : SV_Position; };
  7. // MainVS1 should appear as a possible vs entry
  8. VertexOutput1 MainVS1(VertexInput1 input, uint vtxIndex : SV_VertexID)
  9. {
  10. VertexOutput1 output;
  11. output.m_position = float4(input.m_position, 1.0);
  12. return output;
  13. }
  14. //////////////////////////////////////////////////////////////////////////////////////
  15. struct VertexInput2 {
  16. float3 m_position : POSITION0;
  17. float m_color[4] : COLOR;
  18. uint m_bIndex : BLENDINDICES;
  19. float m_bWeight : BLENDWEIGHT;
  20. float3 m_normal : NORMAL3;
  21. float3 m_tangent : TANGENT6;
  22. float3 m_bitangent: BINORMAL7;
  23. uint m_primId : SV_PrimitiveID;
  24. };
  25. struct VertexOutput2 { float4 m_position : SV_Position; };
  26. // MainVS2 should appear as a possible vs entry
  27. VertexOutput2 MainVS2(VertexInput2 input, uint vtxIndex : SV_VertexID, uint instId : SV_InstanceID)
  28. {
  29. VertexOutput2 output;
  30. output.m_position = float4(input.m_position, 1.0);
  31. return output;
  32. }
  33. //////////////////////////////////////////////////////////////////////////////////////
  34. struct VertexInput3 {
  35. float3 m_position : POSITION;
  36. float m_color[4] : COLOR;
  37. };
  38. struct VertexOutput3 { float4 m_position : SV_Position; };
  39. // float4 doesntHaveSemantic doesn't have a semantic so MainVS3 won't appear as a possible vs entry
  40. VertexOutput3 MainVS3(VertexInput3 input, uint vtxIndex : SV_VertexID, float4 doesntHaveSemantic)
  41. {
  42. VertexOutput3 output;
  43. output.m_position = float4(input.m_position, 1.0);
  44. return output;
  45. }
  46. /*
  47. * Error: This shader is invalid, but AZSLc shouldn't crash trying to process it
  48. */
  49. void MainVSInvalid(InvalidInputType input)
  50. {
  51. }
  52. //////////////////////////////////////////////////////////////////////////////////////
  53. struct IALayoutPart1
  54. {
  55. float3 position : POSITION;
  56. };
  57. struct IALayoutPart2
  58. {
  59. float4 color : COLOR;
  60. };
  61. struct VertexOutput4 { float4 m_position : SV_Position; };
  62. // MainVS4 uses distinct valid structs as parameters
  63. VertexOutput4 MainVS4(IALayoutPart1 input1, IALayoutPart2 input2)
  64. {
  65. VertexOutput4 output;
  66. output.m_position = float4(input1.position, 1.0);
  67. return output;
  68. }
  69. //////////////////////////////////////////////////////////////////////////////////////
  70. struct VertexInput5
  71. {
  72. IALayoutPart1 iaPart1;
  73. IALayoutPart2 iaPart2;
  74. };
  75. struct VertexOutput5 { float4 m_position : SV_Position; };
  76. // VertexInput5 is a struct of structs, which is not allowed so MainVS5 won't appear as a possible vs entry
  77. VertexOutput5 MainVS5(VertexInput5 input)
  78. {
  79. VertexOutput5 output;
  80. output.m_position = float4(input.iaPart1.position, 1.0);
  81. return output;
  82. }