spirv.entry-function.inout.hlsl 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // Run: %dxc -T vs_6_0 -E main
  2. struct X {
  3. int a: A;
  4. float4 b: B;
  5. };
  6. struct Y {
  7. uint c: C;
  8. float4 d: D;
  9. };
  10. struct Z {
  11. float e: E;
  12. };
  13. // CHECK: %in_var_O = OpVariable %_ptr_Input_v4int Input
  14. // CHECK-NEXT: %in_var_Q = OpVariable %_ptr_Input_v4int Input
  15. // CHECK-NEXT: %in_var_A = OpVariable %_ptr_Input_int Input
  16. // CHECK-NEXT: %in_var_B = OpVariable %_ptr_Input_v4float Input
  17. // CHECK-NEXT: %in_var_C = OpVariable %_ptr_Input_uint Input
  18. // CHECK-NEXT: %in_var_D = OpVariable %_ptr_Input_v4float Input
  19. // CHECK-NEXT: %in_var_R = OpVariable %_ptr_Input_float Input
  20. // CHECK-NEXT: %in_var_E = OpVariable %_ptr_Input_float Input
  21. // CHECK-NEXT: %out_var_P = OpVariable %_ptr_Output_v4int Output
  22. // CHECK-NEXT: %out_var_Q = OpVariable %_ptr_Output_v4int Output
  23. // CHECK-NEXT: %out_var_A = OpVariable %_ptr_Output_int Output
  24. // CHECK-NEXT: %out_var_B = OpVariable %_ptr_Output_v4float Output
  25. // CHECK-NEXT: %out_var_C = OpVariable %_ptr_Output_uint Output
  26. // CHECK-NEXT: %out_var_D = OpVariable %_ptr_Output_v4float Output
  27. // CHECK: %main = OpFunction %void None
  28. // CHECK-NEXT: OpLabel
  29. // CHECK-NEXT: %param_var_param1 = OpVariable %_ptr_Function_v4int Function
  30. // CHECK-NEXT: %param_var_param2 = OpVariable %_ptr_Function_v4int Function
  31. // CHECK-NEXT: %param_var_param3 = OpVariable %_ptr_Function_v4int Function
  32. // CHECK-NEXT: %param_var_param4 = OpVariable %_ptr_Function_X Function
  33. // CHECK-NEXT: %param_var_param5 = OpVariable %_ptr_Function_X Function
  34. // CHECK-NEXT: %param_var_param6 = OpVariable %_ptr_Function_Y Function
  35. // CHECK-NEXT: %param_var_param7 = OpVariable %_ptr_Function_float Function
  36. // CHECK-NEXT: %param_var_param8 = OpVariable %_ptr_Function_Z Function
  37. // CHECK-NEXT: [[inO:%\d+]] = OpLoad %v4int %in_var_O
  38. // CHECK-NEXT: OpStore %param_var_param1 [[inO]]
  39. // CHECK-NEXT: [[inQ:%\d+]] = OpLoad %v4int %in_var_Q
  40. // CHECK-NEXT: OpStore %param_var_param3 [[inQ]]
  41. // CHECK-NEXT: [[inA:%\d+]] = OpLoad %int %in_var_A
  42. // CHECK-NEXT: [[inB:%\d+]] = OpLoad %v4float %in_var_B
  43. // CHECK-NEXT: [[inX:%\d+]] = OpCompositeConstruct %X [[inA]] [[inB]]
  44. // CHECK-NEXT: OpStore %param_var_param4 [[inX]]
  45. // CHECK-NEXT: [[inC:%\d+]] = OpLoad %uint %in_var_C
  46. // CHECK-NEXT: [[inD:%\d+]] = OpLoad %v4float %in_var_D
  47. // CHECK-NEXT: [[inY:%\d+]] = OpCompositeConstruct %Y [[inC]] [[inD]]
  48. // CHECK-NEXT: OpStore %param_var_param6 [[inY]]
  49. // CHECK-NEXT: [[inR:%\d+]] = OpLoad %float %in_var_R
  50. // CHECK-NEXT: OpStore %param_var_param7 [[inR]]
  51. // CHECK-NEXT: [[inE:%\d+]] = OpLoad %float %in_var_E
  52. // CHECK-NEXT: [[inZ:%\d+]] = OpCompositeConstruct %Z [[inE]]
  53. // CHECK-NEXT: OpStore %param_var_param8 [[inZ]]
  54. // CHECK-NEXT: OpFunctionCall %void %src_main %param_var_param1 %param_var_param2 %param_var_param3 %param_var_param4 %param_var_param5 %param_var_param6 %param_var_param7 %param_var_param8
  55. // CHECK-NEXT: [[outP:%\d+]] = OpLoad %v4int %param_var_param2
  56. // CHECK-NEXT: OpStore %out_var_P [[outP]]
  57. // CHECK-NEXT: [[outQ:%\d+]] = OpLoad %v4int %param_var_param3
  58. // CHECK-NEXT: OpStore %out_var_Q [[outQ]]
  59. // CHECK-NEXT: [[outX:%\d+]] = OpLoad %X %param_var_param5
  60. // CHECK-NEXT: [[outA:%\d+]] = OpCompositeExtract %int [[outX]] 0
  61. // CHECK-NEXT: OpStore %out_var_A [[outA]]
  62. // CHECK-NEXT: [[outB:%\d+]] = OpCompositeExtract %v4float [[outX]] 1
  63. // CHECK-NEXT: OpStore %out_var_B [[outB]]
  64. // CHECK-NEXT: [[outY:%\d+]] = OpLoad %Y %param_var_param6
  65. // CHECK-NEXT: [[outC:%\d+]] = OpCompositeExtract %uint [[outY]] 0
  66. // CHECK-NEXT: OpStore %out_var_C [[outC]]
  67. // CHECK-NEXT: [[outD:%\d+]] = OpCompositeExtract %v4float [[outY]] 1
  68. // CHECK-NEXT: OpStore %out_var_D [[outD]]
  69. // CHECK-NEXT: OpReturn
  70. // CHECK-NEXT: OpFunctionEnd
  71. // Input semantics: O, Q, A, B, C, D, R, E
  72. // Output semantics: P, Q, A, B, C, D
  73. void main(in int4 param1: O,
  74. out int4 param2: P,
  75. inout int4 param3: Q,
  76. in X param4,
  77. out X param5,
  78. inout Y param6,
  79. uniform float param7: R,
  80. uniform Z param8)
  81. {
  82. // CHECK-LABEL: %src_main = OpFunction
  83. param2 = param1;
  84. param3 = param1;
  85. param5 = param4;
  86. param6.c = param4.a;
  87. param6.d = param4.b;
  88. }