cbufferInt16.hlsl 10 KB

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