effects-syntax_noerr.hlsl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. DeclStmt <col:3, col:38>
  55. `-VarDecl <col:3, col:20> col:20 invalid rtv 'RenderTargetView':'deprecated effect object'
  56. */
  57. Texture2D l_tex { state=foo; }; /* expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  58. /*verify-ast
  59. DeclStmt <col:3, col:33>
  60. `-VarDecl <col:3, col:13> col:13 l_tex 'Texture2D':'Texture2D<vector<float, 4> >'
  61. */
  62. // This is allowed (deprecated effect state block warning):
  63. int foobar {blah=foo;}; /* expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  64. // This is not:
  65. //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 '='}} */
  66. // But this isn't:
  67. int RenderTargetView = 1; /* fxc-error {{X3000: syntax error: unexpected token 'RenderTargetView'}} */
  68. int PixelShader = 1; /* fxc-error {{X3000: syntax error: unexpected token 'PixelShader'}} */
  69. int pixelshader = 1; // nor is this /* fxc-error {{X3000: syntax error: unexpected token 'pixelshader'}} */
  70. // This is not ok:
  71. // error X3000: syntax error: unexpected token 'TechNiQue'
  72. int TechNiQue = 1; /* fxc-error {{X3000: syntax error: unexpected token 'TechNiQue'}} */
  73. return tex.Sample(samLinear, float2(0.1,0.2));
  74. /*verify-ast
  75. ReturnStmt <col:3, col:47>
  76. `-CXXMemberCallExpr <col:10, col:47> 'vector<float, 4>'
  77. |-MemberExpr <col:10, col:14> '<bound member function type>' .Sample
  78. | `-DeclRefExpr <col:10> 'Texture2D':'Texture2D<vector<float, 4> >' lvalue Var 'tex' 'Texture2D':'Texture2D<vector<float, 4> >'
  79. |-ImplicitCastExpr <col:21> 'SamplerState' <LValueToRValue>
  80. | `-DeclRefExpr <col:21> 'SamplerState' lvalue Var 'samLinear' 'SamplerState'
  81. `-CXXFunctionalCastExpr <col:32, col:46> 'float2':'vector<float, 2>' functional cast to float2 <NoOp>
  82. `-InitListExpr <col:39, col:43> 'float2':'vector<float, 2>'
  83. |-ImplicitCastExpr <col:39> 'float' <FloatingCast>
  84. | `-FloatingLiteral <col:39> 'literal float' 1.000000e-01
  85. `-ImplicitCastExpr <col:43> 'float' <FloatingCast>
  86. `-FloatingLiteral <col:43> 'literal float' 2.000000e-01
  87. */
  88. }
  89. // Effects objects to ignore:
  90. // These all accept/ignore effect annotations < ... >
  91. // These all accept/ignore state block syntax
  92. 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 {{}} */
  93. 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 {{}} */
  94. /*verify-ast
  95. VarDecl <col:1, col:26> col:26 invalid ps1 'const PixelShader':'const deprecated effect object' static
  96. */
  97. // expected-note@? {{'PixelShader' declared here}}
  98. //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}} expected-error {{use of undeclared identifier 'ps1'}}fxc-pass {{}} */
  99. /*verify-ast
  100. VarDecl <col:1, col:13> col:13 invalid ps 'PixelShader':'deprecated effect object'
  101. */
  102. // expected-note@? {{'VertexShader' declared here}}
  103. //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 {{}} */
  104. // Case sensitive
  105. pixelfragment pfrag; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  106. vertexfragment vfrag; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  107. ComputeShader cs; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  108. DomainShader ds; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  109. GeometryShader gs; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  110. HullShader hs; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  111. 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 {{}} */
  112. 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 {{}} */
  113. DepthStencilView SDV; /* expected-warning {{effect object ignored - effect syntax is deprecated}} fxc-pass {{}} */
  114. 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 {{}} */
  115. 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 {{}} */
  116. // Not case-sensitive! Identifier optional
  117. technique T0 /* expected-warning {{effect technique ignored - effect syntax is deprecated}} fxc-pass {{}} */
  118. /*verify-ast
  119. No matching AST found for line!
  120. */
  121. {
  122. pass {}
  123. }
  124. Technique /* expected-warning {{effect technique ignored - effect syntax is deprecated}} fxc-pass {{}} */
  125. {
  126. pass {}
  127. }
  128. // Case-sensitive: Identifier optional
  129. technique10 T10 /* expected-warning {{effect technique ignored - effect syntax is deprecated}} fxc-pass {{}} */
  130. /*verify-ast
  131. No matching AST found for line!
  132. */
  133. {
  134. pass {}
  135. }
  136. technique10 /* expected-warning {{effect technique ignored - effect syntax is deprecated}} fxc-pass {{}} */
  137. {
  138. pass {}
  139. }
  140. // We don't bother handling weird casing, so this will be a syntax error:
  141. //TechNiQue /* expected-error {{HLSL requires a type specifier for all declarations}} fxc-pass {{}} */
  142. /*verify-ast
  143. VarDecl <col:1> col:1 invalid TechNiQue 'int'
  144. */
  145. //{ /* expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  146. // pass {}
  147. //} /* expected-error {{expected ';' after top level declarator}} fxc-pass {{}} */
  148. int foobar3;
  149. /*verify-ast
  150. VarDecl <col:1, col:5> col:5 foobar3 'int'
  151. */
  152. //TechNique T5 /* expected-error {{unknown type name 'TechNique'}} fxc-pass {{}} */
  153. /*verify-ast
  154. VarDecl <col:1, col:11> col:11 invalid T5 'int'
  155. */
  156. //{ /* expected-warning {{effect state block ignored - effect syntax is deprecated}} fxc-pass {{}} */
  157. // pass {}
  158. //} /* expected-error {{expected ';' after top level declarator}} fxc-pass {{}} */
  159. int foobar4;
  160. /*verify-ast
  161. VarDecl <col:1, col:5> col:5 foobar4 'int'
  162. */