namespace.functions.hlsl 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // Run: %dxc -T ps_6_0 -E main
  2. // CHECK: OpName %AddRed "AddRed"
  3. // CHECK: OpName %A__AddRed "A::AddRed"
  4. // CHECK: OpName %A__B__AddRed "A::B::AddRed"
  5. // CHECK: OpName %A__B__AddBlue "A::B::AddBlue"
  6. // CHECK: OpName %A__AddGreen "A::AddGreen"
  7. // CHECK: OpName %A__createMyStruct "A::createMyStruct"
  8. // CHECK: OpName %A__myStruct_add "A::myStruct.add"
  9. // CHECK: [[v3f2:%\d+]] = OpConstantComposite %v3float %float_2 %float_2 %float_2
  10. // CHECK: [[v4f0:%\d+]] = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
  11. // CHECK: [[v3f0:%\d+]] = OpConstantComposite %v3float %float_0 %float_0 %float_0
  12. // CHECK: [[v3f1:%\d+]] = OpConstantComposite %v3float %float_1 %float_1 %float_1
  13. // CHECK: [[v3f3:%\d+]] = OpConstantComposite %v3float %float_3 %float_3 %float_3
  14. namespace A {
  15. float3 AddRed() { return float3(0, 0, 0); }
  16. float3 AddGreen();
  17. namespace B {
  18. typedef float3 f3;
  19. float3 AddRed() { return float3(1, 1, 1); }
  20. float3 AddBlue();
  21. } // end namespace B
  22. struct myStruct {
  23. int point1;
  24. int point2;
  25. int add() {
  26. return point1 + point2;
  27. }
  28. };
  29. myStruct createMyStruct() {
  30. myStruct s;
  31. return s;
  32. }
  33. } // end namespace A
  34. float3 AddRed() { return float3(2, 2, 2); }
  35. float4 main(float4 PosCS : SV_Position) : SV_Target
  36. {
  37. // CHECK: {{%\d+}} = OpFunctionCall %v3float %AddRed
  38. float3 val_1 = AddRed();
  39. // CHECK: {{%\d+}} = OpFunctionCall %v3float %A__AddRed
  40. float3 val_2 = A::AddRed();
  41. // CHECK: {{%\d+}} = OpFunctionCall %v3float %A__B__AddRed
  42. float3 val_3 = A::B::AddRed();
  43. // CHECK: {{%\d+}} = OpFunctionCall %v3float %A__B__AddBlue
  44. float3 val_4 = A::B::AddBlue();
  45. // CHECK: {{%\d+}} = OpFunctionCall %v3float %A__AddGreen
  46. float3 val_5 = A::AddGreen();
  47. // CHECK: OpStore %vec3f [[v3f2]]
  48. A::B::f3 vec3f = float3(2,2,2);
  49. // CHECK: [[s:%\d+]] = OpFunctionCall %myStruct %A__createMyStruct
  50. // CHECK: OpStore %s [[s]]
  51. A::myStruct s = A::createMyStruct();
  52. // CHECK: {{%\d+}} = OpFunctionCall %int %A__myStruct_add %s
  53. int val_6 = s.add();
  54. return float4(0,0,0,0);
  55. }
  56. float3 A::B::AddBlue() { return float3(1, 1, 1); }
  57. float3 A::AddGreen() { return float3(3, 3, 3); }
  58. // CHECK: %AddRed = OpFunction %v3float None
  59. // CHECK: OpReturnValue [[v3f2]]
  60. // CHECK: %A__AddRed = OpFunction %v3float None
  61. // CHECK: OpReturnValue [[v3f0]]
  62. // CHECK: %A__B__AddRed = OpFunction %v3float None
  63. // CHECK: OpReturnValue [[v3f1]]
  64. // CHECK: %A__B__AddBlue = OpFunction %v3float None
  65. // CHECK: OpReturnValue [[v3f1]]
  66. // CHECK: %A__AddGreen = OpFunction %v3float None
  67. // CHECK: OpReturnValue [[v3f3]]
  68. // TODO: struct name should also be updated to A::myStruct
  69. // CHECK: %A__createMyStruct = OpFunction %myStruct None
  70. // CHECK: %A__myStruct_add = OpFunction %int None
  71. // CHECK: %param_this = OpFunctionParameter %_ptr_Function_myStruct
  72. // CHECK: OpAccessChain %_ptr_Function_int %param_this %int_0
  73. // CHECK: OpAccessChain %_ptr_Function_int %param_this %int_1