cbufferHalf.hlsl 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. // RUN: %dxilver 1.2 | %dxc -E main -T ps_6_2 -enable-16bit-types %s | FileCheck %s
  2. // CHECK: Use native low precision
  3. // CHECK: cbuffer Foo
  4. // CHECK: {
  5. // CHECK: struct Foo
  6. // CHECK: {
  7. // CHECK: half f_h1; ; Offset: 0
  8. // CHECK: float3 f_f3; ; Offset: 4
  9. // CHECK: half2 f_h2; ; Offset: 16
  10. // CHECK: float3 f_f3_1; ; Offset: 20
  11. // CHECK: float2 f_f2; ; Offset: 32
  12. // CHECK: half4 f_h4; ; Offset: 40
  13. // CHECK: half2 f_h2_1; ; Offset: 48
  14. // CHECK: half3 f_h3; ; Offset: 52
  15. // CHECK: double f_d1; ; Offset: 64
  16. // CHECK: half3 f_h3_1; ; Offset: 72
  17. // CHECK: int f_i1; ; Offset: 80
  18. // CHECK: double f_d2; ; Offset: 88
  19. // CHECK: } Foo; ; Offset: 0 Size: 96
  20. // CHECK: }
  21. cbuffer Foo {
  22. half f_h1;
  23. float3 f_f3;
  24. half2 f_h2;
  25. float3 f_f3_1;
  26. float2 f_f2;
  27. half4 f_h4;
  28. half2 f_h2_1;
  29. half3 f_h3;
  30. double f_d1;
  31. half3 f_h3_1;
  32. int f_i1;
  33. double f_d2;
  34. }
  35. // CHECK: cbuffer Bar
  36. // CHECK: {
  37. // CHECK: struct Bar
  38. // CHECK: {
  39. // CHECK: half b_h1; ; Offset: 0
  40. // CHECK: half b_h2; ; Offset: 2
  41. // CHECK: half b_h3; ; Offset: 4
  42. // CHECK: half2 b_h4; ; Offset: 6
  43. // CHECK: half3 b_h5; ; Offset: 10
  44. // CHECK: half3 b_h6; ; Offset: 16
  45. // CHECK: half4 b_h7; ; Offset: 22
  46. // CHECK: half b_h8; ; Offset: 30
  47. // CHECK: half4 b_h9; ; Offset: 32
  48. // CHECK: half3 b_h10; ; Offset: 40
  49. // CHECK: half2 b_h11; ; Offset: 48
  50. // CHECK: half3 b_h12; ; Offset: 52
  51. // CHECK: half2 b_h13; ; Offset: 58
  52. // CHECK: half b_h14; ; Offset: 62
  53. // CHECK: half b_h16; ; Offset: 64
  54. // CHECK: half b_h17; ; Offset: 66
  55. // CHECK: half b_h18; ; Offset: 68
  56. // CHECK: half b_h19; ; Offset: 70
  57. // CHECK: half b_h20; ; Offset: 72
  58. // CHECK: half b_h21; ; Offset: 74
  59. // CHECK: half b_h22; ; Offset: 76
  60. // CHECK: half b_h23; ; Offset: 78
  61. // CHECK: } Bar; ; Offset: 0 Size: 80
  62. // CHECK: }
  63. cbuffer Bar {
  64. half b_h1;
  65. half b_h2;
  66. half b_h3;
  67. half2 b_h4;
  68. half3 b_h5;
  69. half3 b_h6;
  70. half4 b_h7;
  71. half b_h8;
  72. half4 b_h9;
  73. half3 b_h10;
  74. half2 b_h11;
  75. half3 b_h12;
  76. half2 b_h13;
  77. half b_h14;
  78. half b_h16;
  79. half b_h17;
  80. half b_h18;
  81. half b_h19;
  82. half b_h20;
  83. half b_h21;
  84. half b_h22;
  85. half b_h23;
  86. }
  87. // CHECK: %dx.types.CBufRet.f16.8 = type { half, half, half, half, half, half, half, half }
  88. float4 main() : SV_Target {
  89. return f_h1 + f_f3.x
  90. // CHECK: call %dx.types.CBufRet.f16.8 @dx.op.cbufferLoadLegacy.f16(i32 59, %dx.types.Handle %Foo_cbuffer, i32 0) ; CBufferLoadLegacy(handle,regIndex)
  91. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 0
  92. // CHECK: call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %Foo_cbuffer, i32 0) ; CBufferLoadLegacy(handle,regIndex)
  93. // CHECK: extractvalue %dx.types.CBufRet.f32 {{%[0-9]+}}, 1
  94. + f_h2.x + f_h2.y + f_f3_1.z
  95. // CHECK: call %dx.types.CBufRet.f16.8 @dx.op.cbufferLoadLegacy.f16(i32 59, %dx.types.Handle %Foo_cbuffer, i32 1) ; CBufferLoadLegacy(handle,regIndex)
  96. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 0
  97. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 1
  98. // CHECK: call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %Foo_cbuffer, i32 1) ; CBufferLoadLegacy(handle,regIndex)
  99. // CHECK: extractvalue %dx.types.CBufRet.f32 {{%[0-9]+}}, 3
  100. + f_f2.x + f_h4.x + f_h4.y + f_h4.z + f_h4.w
  101. // CHECK: call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %Foo_cbuffer, i32 2) ; CBufferLoadLegacy(handle,regIndex)
  102. // CHECK: extractvalue %dx.types.CBufRet.f32 {{%[0-9]+}}, 0
  103. // CHECK: call %dx.types.CBufRet.f16.8 @dx.op.cbufferLoadLegacy.f16(i32 59, %dx.types.Handle %Foo_cbuffer, i32 2) ; CBufferLoadLegacy(handle,regIndex)
  104. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 4
  105. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 5
  106. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 6
  107. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 7
  108. + f_h2_1.x + f_h2_1.y + f_h3.x + f_h3.y + f_h3.z
  109. // CHECK: call %dx.types.CBufRet.f16.8 @dx.op.cbufferLoadLegacy.f16(i32 59, %dx.types.Handle %Foo_cbuffer, i32 3) ; CBufferLoadLegacy(handle,regIndex)
  110. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 0
  111. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 1
  112. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 2
  113. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 3
  114. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 4
  115. + f_d1 + f_h3_1.x
  116. // CHECK: call %dx.types.CBufRet.f64 @dx.op.cbufferLoadLegacy.f64(i32 59, %dx.types.Handle %Foo_cbuffer, i32 4) ; CBufferLoadLegacy(handle,regIndex)
  117. // CHECK: extractvalue %dx.types.CBufRet.f64 {{%[0-9]+}}, 0
  118. // CHECK: call %dx.types.CBufRet.f16.8 @dx.op.cbufferLoadLegacy.f16(i32 59, %dx.types.Handle %Foo_cbuffer, i32 4) ; CBufferLoadLegacy(handle,regIndex)
  119. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 4
  120. + f_i1 + f_d2
  121. // CHECK: call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %Foo_cbuffer, i32 5) ; CBufferLoadLegacy(handle,regIndex)
  122. // CHECK: extractvalue %dx.types.CBufRet.i32 {{%[0-9]+}}, 0
  123. // CHECK: call %dx.types.CBufRet.f64 @dx.op.cbufferLoadLegacy.f64(i32 59, %dx.types.Handle %Foo_cbuffer, i32 5) ; CBufferLoadLegacy(handle,regIndex)
  124. // CHECK: extractvalue %dx.types.CBufRet.f64 {{%[0-9]+}}, 1
  125. + b_h1 + b_h2 + b_h3 + b_h4.x + b_h5.y + b_h5.x + b_h5.y + b_h5.z +
  126. // CHECK: call %dx.types.CBufRet.f16.8 @dx.op.cbufferLoadLegacy.f16(i32 59, %dx.types.Handle %Bar_cbuffer, i32 0) ; CBufferLoadLegacy(handle,regIndex)
  127. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 0
  128. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 1
  129. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 2
  130. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 3
  131. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 6
  132. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 5
  133. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 7
  134. + b_h6.x + b_h6.y + b_h6.z + b_h7.x + b_h7.y + b_h7.z + b_h7.w + b_h8
  135. // CHECK: call %dx.types.CBufRet.f16.8 @dx.op.cbufferLoadLegacy.f16(i32 59, %dx.types.Handle %Bar_cbuffer, i32 1) ; CBufferLoadLegacy(handle,regIndex)
  136. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 0
  137. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 1
  138. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 2
  139. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 3
  140. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 4
  141. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 5
  142. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 6
  143. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 7
  144. + b_h9.x + b_h9.y + b_h9.z + b_h9.w + b_h10.x + b_h10.y + b_h10.z
  145. // CHECK: call %dx.types.CBufRet.f16.8 @dx.op.cbufferLoadLegacy.f16(i32 59, %dx.types.Handle %Bar_cbuffer, i32 2) ; CBufferLoadLegacy(handle,regIndex)
  146. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 0
  147. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 1
  148. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 2
  149. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 3
  150. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 4
  151. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 5
  152. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 6
  153. + b_h11.x + b_h11.y + b_h12.x + b_h12.y + b_h12.z + b_h13.x + b_h13.y + b_h14
  154. // CHECK: call %dx.types.CBufRet.f16.8 @dx.op.cbufferLoadLegacy.f16(i32 59, %dx.types.Handle %Bar_cbuffer, i32 3) ; CBufferLoadLegacy(handle,regIndex)
  155. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 0
  156. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 1
  157. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 2
  158. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 3
  159. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 4
  160. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 5
  161. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 6
  162. + b_h16 + b_h17 + b_h18 + b_h19 + b_h20 + b_h21 + b_h22 + b_h23;
  163. // CHECK: call %dx.types.CBufRet.f16.8 @dx.op.cbufferLoadLegacy.f16(i32 59, %dx.types.Handle %Bar_cbuffer, i32 4) ; CBufferLoadLegacy(handle,regIndex)
  164. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 0
  165. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 1
  166. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 2
  167. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 3
  168. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 4
  169. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 5
  170. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 6
  171. // CHECK: extractvalue %dx.types.CBufRet.f16.8 {{%[0-9]+}}, 7
  172. }