effects-syntax.hlsl 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. // RUN: %clang_cc1 -fsyntax-only -ffreestanding -verify %s
  2. // :FXC_VERIFY_ARGUMENTS: /E main /T ps_5_1 /Gec
  3. Texture2D tex : register(t1), tex2 : register(t2)
  4. /*verify-ast
  5. VarDecl <col:1, col:11> col:11 used tex 'Texture2D':'Texture2D<vector<float, 4> >'
  6. `-RegisterAssignment <col:17> register(t1)
  7. VarDecl <col:1, col:31> col:31 tex2 'Texture2D':'Texture2D<vector<float, 4> >'
  8. `-RegisterAssignment <col:38> register(t2)
  9. VarDecl <col:1, line:19:10> col:4 texa 'Texture2D [3]'
  10. */
  11. < int foo=1; > /* expected-warning {{possible effect annotation ignored - effect syntax is deprecated}} fxc-pass {{}} */
  12. { /* expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  13. Texture = tex;
  14. Filter = MIN_MAG_MIP_LINEAR;
  15. MaxAnisotropy = 0;
  16. AddressU = Wrap;
  17. AddressV = Wrap;
  18. }, texa[3]
  19. < /* expected-warning {{possible effect annotation ignored - effect syntax is deprecated}} fxc-pass {{}} */
  20. string Name = "texa";
  21. int ArraySize = 3;
  22. >;
  23. Texture texCaps; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  24. SamplerState samLinear : register(s7)
  25. /*verify-ast
  26. VarDecl <col:1, col:14> col:14 used samLinear 'SamplerState'
  27. `-RegisterAssignment <col:26> register(s7)
  28. */
  29. < bool foo=1 > 2; > /* expected-warning {{possible effect annotation ignored - effect syntax is deprecated}} fxc-pass {{}} */
  30. { /* expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  31. Texture = tex;
  32. Filter = MIN_MAG_MIP_LINEAR;
  33. MaxAnisotropy = 0;
  34. AddressU = Wrap;
  35. AddressV = Wrap;
  36. };
  37. // sampler_state objects legal on both SamplerState and SamplerComparisonState objects:
  38. sampler S : register(s1) = sampler_state {texture=tex;}; /* expected-warning {{effect sampler_state assignment ignored - effect syntax is deprecated}} fxc-pass {{}} */
  39. /*verify-ast
  40. VarDecl <col:1, col:9> col:9 S 'sampler':'SamplerState'
  41. `-RegisterAssignment <col:13> register(s1)
  42. */
  43. SamplerComparisonState SC : register(s3) = sampler_state {texture=tex;}; /* expected-warning {{effect sampler_state assignment ignored - effect syntax is deprecated}} fxc-pass {{}} */
  44. float4 main() : SV_Target
  45. {
  46. StateBlock SB; /* expected-error {{unknown type name 'StateBlock'}} fxc-error {{X3000: unrecognized identifier 'SB'}} fxc-error {{X3000: unrecognized identifier 'StateBlock'}} */
  47. {
  48. int StateBlock = 1;
  49. }
  50. // Note this is ok:
  51. int PixelShadeR = 1;
  52. RenderTargetView rtv { state=foo; }; /* expected-warning {{effect object ignored - effect syntax is deprecated}} expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  53. /*verify-ast
  54. No matching AST found for line!
  55. */
  56. Texture2D l_tex { state=foo; }; /* expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  57. /*verify-ast
  58. DeclStmt <col:3, col:33>
  59. `-VarDecl <col:3, col:13> col:13 l_tex 'Texture2D':'Texture2D<vector<float, 4> >'
  60. */
  61. // This is allowed (deprecated effect state block warning):
  62. int foobar {blah=foo;}; /* expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  63. // This is not:
  64. int foobar2 {blah=foo;} = 5; /* expected-error {{expected ';' at end of declaration}} expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-error {{X3000: syntax error: unexpected token '='}} */
  65. // But this isn't:
  66. int RenderTargetView = 1; /* fxc-error {{X3000: syntax error: unexpected token 'RenderTargetView'}} */
  67. int PixelShader = 1; /* fxc-error {{X3000: syntax error: unexpected token 'PixelShader'}} */
  68. int pixelshader = 1; // nor is this /* fxc-error {{X3000: syntax error: unexpected token 'pixelshader'}} */
  69. // This is not ok:
  70. // error X3000: syntax error: unexpected token 'TechNiQue'
  71. int TechNiQue = 1; /* fxc-error {{X3000: syntax error: unexpected token 'TechNiQue'}} */
  72. return tex.Sample(samLinear, float2(0.1,0.2));
  73. /*verify-ast
  74. ReturnStmt <col:3, col:47>
  75. `-CXXMemberCallExpr <col:10, col:47> 'vector<float, 4>'
  76. |-MemberExpr <col:10, col:14> '<bound member function type>' .Sample
  77. | `-DeclRefExpr <col:10> 'Texture2D':'Texture2D<vector<float, 4> >' lvalue Var 'tex' 'Texture2D':'Texture2D<vector<float, 4> >'
  78. |-ImplicitCastExpr <col:21> 'SamplerState' <LValueToRValue>
  79. | `-DeclRefExpr <col:21> 'SamplerState' lvalue Var 'samLinear' 'SamplerState'
  80. `-CXXFunctionalCastExpr <col:32, col:46> 'float2':'vector<float, 2>' functional cast to float2 <NoOp>
  81. `-InitListExpr <col:39, col:43> 'float2':'vector<float, 2>'
  82. |-ImplicitCastExpr <col:39> 'float' <FloatingCast>
  83. | `-FloatingLiteral <col:39> 'literal float' 1.000000e-01
  84. `-ImplicitCastExpr <col:43> 'float' <FloatingCast>
  85. `-FloatingLiteral <col:43> 'literal float' 2.000000e-01
  86. */
  87. }
  88. // Effects objects to ignore:
  89. // These all accept/ignore effect annotations < ... >
  90. // These all accept/ignore state block syntax
  91. texture tex1 < int foo=1; > { state=foo; }; // Case insensitive! /* expected-warning {{effect object ignored - effect syntax is deprecated}} expected-warning {{effect state block ignored - effect syntax is deprecated}} expected-warning {{possible effect annotation ignored - effect syntax is deprecated}} fxc-pass {{}} */
  92. static const PixelShader ps1 { state=foo; }; /* expected-warning {{effect object ignored - effect syntax is deprecated}} expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  93. /*verify-ast
  94. No matching AST found for line!
  95. */
  96. // expected-note@? {{'PixelShader' declared here}}
  97. PixelShadeR ps < int foo=1;> = ps1; // Case insensitive! /* expected-error {{unknown type name 'PixelShadeR'; did you mean 'PixelShader'?}} expected-warning {{effect object ignored - effect syntax is deprecated}} expected-warning {{possible effect annotation ignored - effect syntax is deprecated}} fxc-pass {{}} */
  98. /*verify-ast
  99. No matching AST found for line!
  100. */
  101. // expected-note@? {{'VertexShader' declared here}}
  102. VertexShadeR vs; // Case insensitive! /* expected-error {{unknown type name 'VertexShadeR'; did you mean 'VertexShader'?}} expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  103. // Case sensitive
  104. pixelfragment pfrag; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  105. vertexfragment vfrag; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  106. ComputeShader cs; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  107. DomainShader ds; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  108. GeometryShader gs; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  109. HullShader hs; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  110. BlendState BS { state=foo; }; /* expected-warning {{effect object ignored - effect syntax is deprecated}} expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  111. DepthStencilState DSS { state=foo; }; /* expected-warning {{effect object ignored - effect syntax is deprecated}} expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  112. DepthStencilView SDV; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  113. RasterizerState RS { state=foo; }; /* expected-warning {{effect object ignored - effect syntax is deprecated}} expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  114. RenderTargetView RTV < int foo=1;> ; /* expected-warning {{effect object ignored - effect syntax is deprecated}} expected-warning {{possible effect annotation ignored - effect syntax is deprecated}} fxc-pass {{}} */
  115. // Not case-sensitive! Identifier optional
  116. technique T0 /* expected-warning {{effect technique ignored - effect syntax is deprecated}} fxc-pass {{}} */
  117. /*verify-ast
  118. No matching AST found for line!
  119. */
  120. {
  121. pass {}
  122. }
  123. Technique /* expected-warning {{effect technique ignored - effect syntax is deprecated}} fxc-pass {{}} */
  124. {
  125. pass {}
  126. }
  127. // Case-sensitive: Identifier optional
  128. technique10 T10 /* expected-warning {{effect technique ignored - effect syntax is deprecated}} fxc-pass {{}} */
  129. /*verify-ast
  130. No matching AST found for line!
  131. */
  132. {
  133. pass {}
  134. }
  135. technique10 /* expected-warning {{effect technique ignored - effect syntax is deprecated}} fxc-pass {{}} */
  136. {
  137. pass {}
  138. }
  139. technique11 /* expected-warning {{effect technique ignored - effect syntax is deprecated}} fxc-pass {{}} */
  140. {
  141. pass {}
  142. }
  143. // We don't bother handling weird casing, so this will be a syntax error:
  144. TechNiQue /* expected-error {{HLSL requires a type specifier for all declarations}} fxc-pass {{}} */
  145. /*verify-ast
  146. VarDecl <col:1> col:1 invalid TechNiQue 'const int'
  147. */
  148. { /* expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  149. pass {}
  150. } /* expected-error {{expected ';' after top level declarator}} fxc-pass {{}} */
  151. int foobar3;
  152. /*verify-ast
  153. VarDecl <col:1, col:5> col:5 foobar3 'const int'
  154. */
  155. TechNique T5 /* expected-error {{unknown type name 'TechNique'}} fxc-pass {{}} */
  156. /*verify-ast
  157. VarDecl <col:1, col:11> col:11 invalid T5 'const int'
  158. */
  159. { /* expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  160. pass {}
  161. } /* expected-error {{expected ';' after top level declarator}} fxc-pass {{}} */
  162. int foobar4;
  163. /*verify-ast
  164. VarDecl <col:1, col:5> col:5 foobar4 'const int'
  165. */
  166. int foobar5[] {1, 2, 3}; /* expected-error {{definition of variable with array type needs an explicit size or an initializer}} expected-warning {{effect state block ignored - effect syntax is deprecated. To use braces as an initializer use them with equal signs.}} fxc-error {{X3000: syntax error: unexpected integer constant}} */
  167. int foobar6[4] {1, 2, 3, 4}; /* expected-warning {{effect state block ignored - effect syntax is deprecated. To use braces as an initializer use them with equal signs.}} fxc-error {{X3000: syntax error: unexpected integer constant}} */