cbufferInt16-struct.hlsl 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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: struct struct.Foo
  4. // CHECK: {
  5. // CHECK: int16_t h1; ; Offset: 0
  6. // CHECK: int3 f3; ; Offset: 4
  7. // CHECK: int16_t2 h2; ; Offset: 16
  8. // CHECK: int3 f3_1; ; Offset: 20
  9. // CHECK: int2 f2; ; Offset: 32
  10. // CHECK: int16_t4 h4; ; Offset: 40
  11. // CHECK: int16_t2 h2_1; ; Offset: 48
  12. // CHECK: int16_t3 h3; ; Offset: 52
  13. // CHECK: double d1; ; Offset: 64
  14. // CHECK: int16_t3 h3_1; ; Offset: 72
  15. // CHECK: int i1; ; Offset: 80
  16. // CHECK: double d2; ; Offset: 88
  17. // CHECK: } f; ; Offset: 0 Size: 96
  18. struct Foo {
  19. int16_t h1;
  20. int3 f3;
  21. int16_t2 h2;
  22. int3 f3_1;
  23. int2 f2;
  24. int16_t4 h4;
  25. int16_t2 h2_1;
  26. int16_t3 h3;
  27. double d1;
  28. int16_t3 h3_1;
  29. int i1;
  30. double d2;
  31. };
  32. // CHECK: struct struct.Bar
  33. // CHECK: {
  34. // CHECK: int16_t h1; ; Offset: 0
  35. // CHECK: uint16_t h2; ; Offset: 2
  36. // CHECK: int16_t h3; ; Offset: 4
  37. // CHECK: uint16_t2 h4; ; Offset: 6
  38. // CHECK: int16_t3 h5; ; Offset: 10
  39. // CHECK: uint16_t3 h6; ; Offset: 16
  40. // CHECK: int16_t4 h7; ; Offset: 22
  41. // CHECK: int16_t h8; ; Offset: 30
  42. // CHECK: uint16_t4 h9; ; Offset: 32
  43. // CHECK: int16_t3 h10; ; Offset: 40
  44. // CHECK: uint16_t2 h11; ; Offset: 48
  45. // CHECK: int16_t3 h12; ; Offset: 52
  46. // CHECK: int16_t2 h13; ; Offset: 58
  47. // CHECK: uint16_t h14; ; Offset: 62
  48. // CHECK: int16_t h16; ; Offset: 64
  49. // CHECK: int16_t h17; ; Offset: 66
  50. // CHECK: uint16_t h18; ; Offset: 68
  51. // CHECK: int16_t h19; ; Offset: 70
  52. // CHECK: int16_t h20; ; Offset: 72
  53. // CHECK: int16_t h21; ; Offset: 74
  54. // CHECK: uint16_t h22; ; Offset: 76
  55. // CHECK: int16_t h23; ; Offset: 78
  56. // CHECK: } b; ; Offset: 0 Size: 80
  57. struct Bar {
  58. int16_t h1;
  59. uint16_t h2;
  60. int16_t h3;
  61. uint16_t2 h4;
  62. int16_t3 h5;
  63. uint16_t3 h6;
  64. int16_t4 h7;
  65. int16_t h8;
  66. uint16_t4 h9;
  67. int16_t3 h10;
  68. uint16_t2 h11;
  69. int16_t3 h12;
  70. int16_t2 h13;
  71. uint16_t h14;
  72. int16_t h16;
  73. int16_t h17;
  74. uint16_t h18;
  75. int16_t h19;
  76. int16_t h20;
  77. int16_t h21;
  78. uint16_t h22;
  79. int16_t h23;
  80. };
  81. ConstantBuffer<Foo> f : register(b0);
  82. ConstantBuffer<Bar> b : register(b1);
  83. // CHECK: %dx.types.CBufRet.i16.8 = type { i16, i16, i16, i16, i16, i16, i16, i16 }
  84. int4 main() : SV_Target {
  85. return f.h1 + f.f3.x
  86. // CHECK: call %dx.types.CBufRet.i16.8 @dx.op.cbufferLoadLegacy.i16(i32 59, %dx.types.Handle %f_cbuffer, i32 0) ; CBufferLoadLegacy(handle,regIndex)
  87. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 0
  88. // CHECK: call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %f_cbuffer, i32 0) ; CBufferLoadLegacy(handle,regIndex)
  89. // CHECK: extractvalue %dx.types.CBufRet.i32 {{%[0-9]+}}, 1
  90. + f.h2.x + f.h2.y + f.f3_1.z
  91. // CHECK: call %dx.types.CBufRet.i16.8 @dx.op.cbufferLoadLegacy.i16(i32 59, %dx.types.Handle %f_cbuffer, i32 1) ; CBufferLoadLegacy(handle,regIndex)
  92. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 0
  93. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 1
  94. // CHECK: call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %f_cbuffer, i32 1) ; CBufferLoadLegacy(handle,regIndex)
  95. // CHECK: extractvalue %dx.types.CBufRet.i32 {{%[0-9]+}}, 3
  96. + f.f2.x + f.h4.x + f.h4.y + f.h4.z + f.h4.w
  97. // CHECK: call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %f_cbuffer, i32 2) ; CBufferLoadLegacy(handle,regIndex)
  98. // CHECK: extractvalue %dx.types.CBufRet.i32 {{%[0-9]+}}, 0
  99. // CHECK: call %dx.types.CBufRet.i16.8 @dx.op.cbufferLoadLegacy.i16(i32 59, %dx.types.Handle %f_cbuffer, i32 2) ; CBufferLoadLegacy(handle,regIndex)
  100. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 4
  101. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 5
  102. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 6
  103. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 7
  104. + f.h2_1.x + f.h2_1.y + f.h3.x + f.h3.y + f.h3.z
  105. // CHECK: call %dx.types.CBufRet.i16.8 @dx.op.cbufferLoadLegacy.i16(i32 59, %dx.types.Handle %f_cbuffer, i32 3) ; CBufferLoadLegacy(handle,regIndex)
  106. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 0
  107. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 1
  108. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 2
  109. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 3
  110. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 4
  111. + f.d1 + f.h3_1.x
  112. // CHECK: call %dx.types.CBufRet.f64 @dx.op.cbufferLoadLegacy.f64(i32 59, %dx.types.Handle %f_cbuffer, i32 4) ; CBufferLoadLegacy(handle,regIndex)
  113. // CHECK: extractvalue %dx.types.CBufRet.f64 {{%[0-9]+}}, 0
  114. // CHECK: call %dx.types.CBufRet.i16.8 @dx.op.cbufferLoadLegacy.i16(i32 59, %dx.types.Handle %f_cbuffer, i32 4) ; CBufferLoadLegacy(handle,regIndex)
  115. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 4
  116. + f.i1 + f.d2
  117. // CHECK: call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %f_cbuffer, i32 5) ; CBufferLoadLegacy(handle,regIndex)
  118. // CHECK: extractvalue %dx.types.CBufRet.i32 {{%[0-9]+}}, 0
  119. // CHECK: call %dx.types.CBufRet.f64 @dx.op.cbufferLoadLegacy.f64(i32 59, %dx.types.Handle %f_cbuffer, i32 5) ; CBufferLoadLegacy(handle,regIndex)
  120. // CHECK: extractvalue %dx.types.CBufRet.f64 {{%[0-9]+}}, 1
  121. + b.h1 + b.h2 + b.h3 + b.h4.x + b.h5.y + b.h5.x + b.h5.y + b.h5.z +
  122. // CHECK: call %dx.types.CBufRet.i16.8 @dx.op.cbufferLoadLegacy.i16(i32 59, %dx.types.Handle %b_cbuffer, i32 0) ; CBufferLoadLegacy(handle,regIndex)
  123. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 0
  124. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 1
  125. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 2
  126. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 3
  127. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 6
  128. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 5
  129. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 7
  130. + b.h6.x + b.h6.y + b.h6.z + b.h7.x + b.h7.y + b.h7.z + b.h7.w + b.h8
  131. // CHECK: call %dx.types.CBufRet.i16.8 @dx.op.cbufferLoadLegacy.i16(i32 59, %dx.types.Handle %b_cbuffer, i32 1) ; CBufferLoadLegacy(handle,regIndex)
  132. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 0
  133. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 1
  134. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 2
  135. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 3
  136. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 4
  137. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 5
  138. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 6
  139. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 7
  140. + b.h9.x + b.h9.y + b.h9.z + b.h9.w + b.h10.x + b.h10.y + b.h10.z
  141. // CHECK: call %dx.types.CBufRet.i16.8 @dx.op.cbufferLoadLegacy.i16(i32 59, %dx.types.Handle %b_cbuffer, i32 2) ; CBufferLoadLegacy(handle,regIndex)
  142. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 0
  143. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 1
  144. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 2
  145. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 3
  146. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 4
  147. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 5
  148. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 6
  149. + b.h11.x + b.h11.y + b.h12.x + b.h12.y + b.h12.z + b.h13.x + b.h13.y + b.h14
  150. // CHECK: call %dx.types.CBufRet.i16.8 @dx.op.cbufferLoadLegacy.i16(i32 59, %dx.types.Handle %b_cbuffer, i32 3) ; CBufferLoadLegacy(handle,regIndex)
  151. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 0
  152. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 1
  153. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 2
  154. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 3
  155. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 4
  156. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 5
  157. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 6
  158. + b.h16 + b.h17 + b.h18 + b.h19 + b.h20 + b.h21 + b.h22 + b.h23;
  159. // CHECK: call %dx.types.CBufRet.i16.8 @dx.op.cbufferLoadLegacy.i16(i32 59, %dx.types.Handle %b_cbuffer, i32 4) ; CBufferLoadLegacy(handle,regIndex)
  160. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 0
  161. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 1
  162. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 2
  163. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 3
  164. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 4
  165. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 5
  166. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 6
  167. // CHECK: extractvalue %dx.types.CBufRet.i16.8 {{%[0-9]+}}, 7
  168. }