oo.struct.static.member.hlsl 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // Run: %dxc -T ps_6_0 -E main
  2. struct S {
  3. float a;
  4. float4 b;
  5. };
  6. struct T {
  7. static float4 M;
  8. static S N;
  9. static const float4 U;
  10. int val;
  11. };
  12. // CHECK: [[v4fc:%\d+]] = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
  13. // CHECK: %M = OpVariable %_ptr_Private_v4float Private
  14. // CHECK: %N = OpVariable %_ptr_Private_S Private
  15. // CHECK: %U = OpVariable %_ptr_Private_v4float Private
  16. float4 T::M = float4(1., 2., 3., 4.);
  17. S T::N = {5.0, 1., 2., 3., 4.};
  18. const float4 T::U = float4(1., 2., 3., 4.);
  19. // CHECK-LABEL: %main = OpFunction
  20. // CHECK: OpStore %M [[v4fc]]
  21. // CHECK-NEXT: [[v1to4:%\d+]] = OpCompositeConstruct %v4float %float_1 %float_2 %float_3 %float_4
  22. // CHECK-NEXT: [[v1to5:%\d+]] = OpCompositeConstruct %S %float_5 [[v1to4]]
  23. // CHECK-NEXT: OpStore %N [[v1to5]]
  24. // CHECK-NEXT: OpStore %U [[v4fc]]
  25. // CHECK-LABEL: %src_main = OpFunction
  26. float4 main(float4 input: A) : SV_Target {
  27. T t;
  28. // CHECK: OpStore %M {{%\d+}}
  29. T::M = input;
  30. // CHECK: OpStore %M {{%\d+}}
  31. t.M = input;
  32. // CHECK: [[ptr:%\d+]] = OpAccessChain %_ptr_Private_float %N %int_0
  33. // CHECK-NEXT: OpStore [[ptr]] %float_1
  34. T::N.a = 1.0;
  35. // CHECK: [[ptr:%\d+]] = OpAccessChain %_ptr_Private_v4float %N %int_1
  36. // CHECK-NEXT: OpStore [[ptr]] {{%\d+}}
  37. t.N.b = input;
  38. // CHECK: {{%\d+}} = OpLoad %v4float %M
  39. // CHECK: {{%\d+}} = OpLoad %v4float %M
  40. // CHECK: [[ptr:%\d+]] = OpAccessChain %_ptr_Private_v4float %N %int_1
  41. // CHECK-NEXT: {{%\d+}} = OpLoad %v4float [[ptr]]
  42. // CHECK: [[ptr:%\d+]] = OpAccessChain %_ptr_Private_v4float %N %int_1
  43. // CHECK-NEXT: {{%\d+}} = OpLoad %v4float [[ptr]]
  44. // CHECK: {{%\d+}} = OpLoad %v4float %U
  45. // CHECK: {{%\d+}} = OpLoad %v4float %U
  46. return T::M + t.M + T::N.b + t.N.b + T::U + t.U;
  47. }