spirv.interface.vs.hlsl 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. // Run: %dxc -T vs_6_0 -E main -fspv-reflect
  2. // CHECK: OpCapability ClipDistance
  3. // CHECK: OpCapability CullDistance
  4. // CHECK: OpExtension "SPV_GOOGLE_hlsl_functionality1"
  5. // CHECK: OpEntryPoint Vertex %main "main" %gl_ClipDistance %gl_CullDistance %gl_ClipDistance_0 %gl_CullDistance_0 %in_var_TEXCOORD %in_var_SV_Position %in_var_SV_ClipDistance %in_var_SV_CullDistance0 %gl_PointSize %out_var_COLOR %gl_Position %out_var_TEXCOORD
  6. // CHECK: OpDecorate %gl_ClipDistance BuiltIn ClipDistance
  7. // CHECK: OpDecorateStringGOOGLE %gl_ClipDistance HlslSemanticGOOGLE "SV_ClipDistance"
  8. // CHECK: OpDecorate %gl_CullDistance BuiltIn CullDistance
  9. // CHECK: OpDecorateStringGOOGLE %gl_CullDistance HlslSemanticGOOGLE "SV_CullDistance0"
  10. // CHECK: OpDecorate %gl_ClipDistance_0 BuiltIn ClipDistance
  11. // CHECK: OpDecorateStringGOOGLE %gl_ClipDistance_0 HlslSemanticGOOGLE "SV_ClipDistance"
  12. // CHECK: OpDecorate %gl_CullDistance_0 BuiltIn CullDistance
  13. // CHECK: OpDecorateStringGOOGLE %gl_CullDistance_0 HlslSemanticGOOGLE "SV_CullDistance"
  14. // CHECK: OpDecorateStringGOOGLE %in_var_TEXCOORD HlslSemanticGOOGLE "TEXCOORD"
  15. // CHECK: OpDecorateStringGOOGLE %in_var_SV_Position HlslSemanticGOOGLE "SV_Position"
  16. // CHECK: OpDecorateStringGOOGLE %in_var_SV_ClipDistance HlslSemanticGOOGLE "SV_ClipDistance"
  17. // CHECK: OpDecorateStringGOOGLE %in_var_SV_CullDistance0 HlslSemanticGOOGLE "SV_CullDistance0"
  18. // CHECK: OpDecorate %gl_PointSize BuiltIn PointSize
  19. // CHECK: OpDecorateStringGOOGLE %gl_PointSize HlslSemanticGOOGLE "PSize"
  20. // CHECK: OpDecorateStringGOOGLE %out_var_COLOR HlslSemanticGOOGLE "COLOR"
  21. // CHECK: OpDecorate %gl_Position BuiltIn Position
  22. // CHECK: OpDecorateStringGOOGLE %gl_Position HlslSemanticGOOGLE "SV_Position"
  23. // CHECK: OpDecorateStringGOOGLE %out_var_TEXCOORD HlslSemanticGOOGLE "TEXCOORD"
  24. // CHECK: OpDecorate %in_var_TEXCOORD Location 0
  25. // CHECK: OpDecorate %in_var_SV_Position Location 1
  26. // CHECK: OpDecorate %in_var_SV_ClipDistance Location 2
  27. // CHECK: OpDecorate %in_var_SV_CullDistance0 Location 3
  28. // CHECK: OpDecorate %out_var_COLOR Location 0
  29. // CHECK: OpDecorate %out_var_TEXCOORD Location 1
  30. // clipdis0 + clipdis1 : 5 floats
  31. // culldis3 + culldis5 + culldis6 : 3 floats
  32. // CHECK: %gl_ClipDistance = OpVariable %_ptr_Input__arr_float_uint_2 Input
  33. // CHECK: %gl_CullDistance = OpVariable %_ptr_Input__arr_float_uint_3 Input
  34. // CHECK: %gl_ClipDistance_0 = OpVariable %_ptr_Output__arr_float_uint_5 Output
  35. // CHECK: %gl_CullDistance_0 = OpVariable %_ptr_Output__arr_float_uint_3 Output
  36. // CHECK: %in_var_TEXCOORD = OpVariable %_ptr_Input_v4float Input
  37. // CHECK: %in_var_SV_Position = OpVariable %_ptr_Input_v4float Input
  38. // CHECK: %in_var_SV_ClipDistance = OpVariable %_ptr_Input_v2float Input
  39. // CHECK: %in_var_SV_CullDistance0 = OpVariable %_ptr_Input_v3float Input
  40. // CHECK: %gl_PointSize = OpVariable %_ptr_Output_float Output
  41. // CHECK: %out_var_COLOR = OpVariable %_ptr_Output_v4float Output
  42. // CHECK: %gl_Position = OpVariable %_ptr_Output_v4float Output
  43. // CHECK: %out_var_TEXCOORD = OpVariable %_ptr_Output_v4float Output
  44. struct InnerInnerStruct {
  45. float4 position : SV_Position; // -> BuiltIn Position in gl_Pervertex
  46. };
  47. struct InnerStruct {
  48. float2 clipdis1 : SV_ClipDistance1; // -> BuiltIn ClipDistance in gl_PerVertex
  49. InnerInnerStruct s;
  50. };
  51. struct VSOut {
  52. float4 color : COLOR; // -> Output variable
  53. InnerStruct s;
  54. };
  55. [[vk::builtin("PointSize")]]
  56. float main(out VSOut vsOut,
  57. out float3 clipdis0 : SV_ClipDistance0, // -> BuiltIn ClipDistance in gl_PerVertex
  58. inout float4 coord : TEXCOORD, // -> Input & output variable
  59. out float culldis5 : SV_CullDistance5, // -> BuiltIn CullDistance in gl_PerVertex
  60. out float culldis3 : SV_CullDistance3, // -> BuiltIn CullDistance in gl_PerVertex
  61. out float culldis6 : SV_CullDistance6, // -> BuiltIn CullDistance in gl_PerVertex
  62. in float4 inPos : SV_Position, // -> Input variable
  63. in float2 inClip : SV_ClipDistance, // -> Input variable
  64. in float3 inCull : SV_CullDistance0 // -> Input variable
  65. ) : PSize { // -> Builtin PointSize
  66. vsOut = (VSOut)0;
  67. clipdis0 = 1.;
  68. coord = 2.;
  69. culldis5 = 3.;
  70. culldis3 = 4.;
  71. culldis6 = 5.;
  72. return inPos.x + inClip.x + inCull.x;
  73. // Layout of ClipDistance array:
  74. // clipdis0: 3 floats, offset 0
  75. // clipdis1: 2 floats, offset 3
  76. // Layout of CullDistance array:
  77. // culldis3: 1 floats, offset 0
  78. // culldis5: 1 floats, offset 1
  79. // culldis6: 1 floats, offset 2
  80. // CHECK: [[texcoord:%\d+]] = OpLoad %v4float %in_var_TEXCOORD
  81. // CHECK-NEXT: OpStore %param_var_coord [[texcoord]]
  82. // CHECK-NEXT: [[pos:%\d+]] = OpLoad %v4float %in_var_SV_Position
  83. // CHECK-NEXT: OpStore %param_var_inPos [[pos]]
  84. // CHECK-NEXT: [[inClip:%\d+]] = OpLoad %v2float %in_var_SV_ClipDistance
  85. // CHECK-NEXT: OpStore %param_var_inClip [[inClip]]
  86. // CHECK-NEXT: [[inCull:%\d+]] = OpLoad %v3float %in_var_SV_CullDistance0
  87. // CHECK-NEXT: OpStore %param_var_inCull [[inCull]]
  88. // CHECK-NEXT: [[ptSize:%\d+]] = OpFunctionCall %float %src_main
  89. // CHECK-NEXT: OpStore %gl_PointSize [[ptSize]]
  90. // Write out COLOR
  91. // CHECK-NEXT: [[vsOut:%\d+]] = OpLoad %VSOut %param_var_vsOut
  92. // CHECK-NEXT: [[outColor:%\d+]] = OpCompositeExtract %v4float [[vsOut]] 0
  93. // CHECK-NEXT: OpStore %out_var_COLOR [[outColor]]
  94. // CHECK-NEXT: [[innerS:%\d+]] = OpCompositeExtract %InnerStruct [[vsOut]] 1
  95. // Write out SV_ClipDistance1
  96. // CHECK-NEXT: [[clip1:%\d+]] = OpCompositeExtract %v2float [[innerS]] 0
  97. // CHECK-NEXT: [[clipArr3:%\d+]] = OpAccessChain %_ptr_Output_float %gl_ClipDistance_0 %uint_3
  98. // CHECK-NEXT: [[clip10:%\d+]] = OpCompositeExtract %float [[clip1]] 0
  99. // CHECK-NEXT: OpStore [[clipArr3]] [[clip10]]
  100. // CHECK-NEXT: [[clipArr4:%\d+]] = OpAccessChain %_ptr_Output_float %gl_ClipDistance_0 %uint_4
  101. // CHECK-NEXT: [[clip11:%\d+]] = OpCompositeExtract %float [[clip1]] 1
  102. // CHECK-NEXT: OpStore [[clipArr4]] [[clip11]]
  103. // CHECK-NEXT: [[inner2S:%\d+]] = OpCompositeExtract %InnerInnerStruct [[innerS]] 1
  104. // Write out SV_Position
  105. // CHECK-NEXT: [[pos:%\d+]] = OpCompositeExtract %v4float [[inner2S]] 0
  106. // CHECK-NEXT: OpStore %gl_Position [[pos]]
  107. // Write out SV_ClipDistance0
  108. // CHECK-NEXT: [[clip0:%\d+]] = OpLoad %v3float %param_var_clipdis0
  109. // CHECK-NEXT: [[clipArr0:%\d+]] = OpAccessChain %_ptr_Output_float %gl_ClipDistance_0 %uint_0
  110. // CHECK-NEXT: [[clip00:%\d+]] = OpCompositeExtract %float [[clip0]] 0
  111. // CHECK-NEXT: OpStore [[clipArr0]] [[clip00]]
  112. // CHECK-NEXT: [[clipArr1:%\d+]] = OpAccessChain %_ptr_Output_float %gl_ClipDistance_0 %uint_1
  113. // CHECK-NEXT: [[clip01:%\d+]] = OpCompositeExtract %float [[clip0]] 1
  114. // CHECK-NEXT: OpStore [[clipArr1]] [[clip01]]
  115. // CHECK-NEXT: [[clipArr2:%\d+]] = OpAccessChain %_ptr_Output_float %gl_ClipDistance_0 %uint_2
  116. // CHECK-NEXT: [[clip02:%\d+]] = OpCompositeExtract %float [[clip0]] 2
  117. // CHECK-NEXT: OpStore [[clipArr2]] [[clip02]]
  118. // Write out TEXCOORD
  119. // CHECK-NEXT: [[texcord:%\d+]] = OpLoad %v4float %param_var_coord
  120. // CHECK-NEXT: OpStore %out_var_TEXCOORD [[texcord]]
  121. // Write out SV_CullDistance5
  122. // CHECK-NEXT: [[cull5:%\d+]] = OpLoad %float %param_var_culldis5
  123. // CHECK-NEXT: [[cullArr1:%\d+]] = OpAccessChain %_ptr_Output_float %gl_CullDistance_0 %uint_1
  124. // CHECK-NEXT: OpStore [[cullArr1]] [[cull5]]
  125. // Write out SV_CullDistance3
  126. // CHECK-NEXT: [[cull3:%\d+]] = OpLoad %float %param_var_culldis3
  127. // CHECK-NEXT: [[cullArr0:%\d+]] = OpAccessChain %_ptr_Output_float %gl_CullDistance_0 %uint_0
  128. // CHECK-NEXT: OpStore [[cullArr0]] [[cull3]]
  129. // Write out SV_CullDistance6
  130. // CHECK-NEXT: [[cull6:%\d+]] = OpLoad %float %param_var_culldis6
  131. // CHECK-NEXT: [[cullArr2:%\d+]] = OpAccessChain %_ptr_Output_float %gl_CullDistance_0 %uint_2
  132. // CHECK-NEXT: OpStore [[cullArr2]] [[cull6]]
  133. }