cast.flat-conversion.implicit.hlsl 5.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Run: %dxc -T ps_6_0 -E main
  2. struct VSOutput {
  3. float4 sv_pos : SV_POSITION;
  4. uint3 normal : NORMAL;
  5. int2 tex_coord : TEXCOORD;
  6. bool mybool[2] : MYBOOL;
  7. int arr[5] : MYARRAY;
  8. float2x3 mat2x3 : MYMATRIX;
  9. };
  10. // CHECK: [[nullVSOutput:%\d+]] = OpConstantNull %VSOutput
  11. void main() {
  12. int x = 3;
  13. // CHECK: OpStore %output1 [[nullVSOutput]]
  14. VSOutput output1 = (VSOutput)0;
  15. // CHECK: OpStore %output2 [[nullVSOutput]]
  16. VSOutput output2 = (VSOutput)0.0;
  17. // CHECK: OpStore %output3 [[nullVSOutput]]
  18. VSOutput output3 = (VSOutput)false;
  19. // CHECK: [[f1:%\d+]] = OpConvertSToF %float %int_1
  20. // CHECK-NEXT: [[v4f1:%\d+]] = OpCompositeConstruct %v4float [[f1]] [[f1]] [[f1]] [[f1]]
  21. // CHECK-NEXT: [[u1:%\d+]] = OpBitcast %uint %int_1
  22. // CHECK-NEXT: [[v3u1:%\d+]] = OpCompositeConstruct %v3uint [[u1]] [[u1]] [[u1]]
  23. // CHECK-NEXT: [[v2i1:%\d+]] = OpCompositeConstruct %v2int %int_1 %int_1
  24. // CHECK-NEXT: [[bool1:%\d+]] = OpINotEqual %bool %int_1 %int_0
  25. // CHECK-NEXT: [[arr2bool1:%\d+]] = OpCompositeConstruct %_arr_bool_uint_2 [[bool1]] [[bool1]]
  26. // CHECK-NEXT: [[arr5i1:%\d+]] = OpCompositeConstruct %_arr_int_uint_5 %int_1 %int_1 %int_1 %int_1 %int_1
  27. // CHECK-NEXT: [[f1_1:%\d+]] = OpConvertSToF %float %int_1
  28. // CHECK-NEXT: [[col3:%\d+]] = OpCompositeConstruct %v3float [[f1_1]] [[f1_1]] [[f1_1]]
  29. // CHECK-NEXT: [[matFloat1:%\d+]] = OpCompositeConstruct %mat2v3float [[col3]] [[col3]]
  30. // CHECK-NEXT: [[flatConvert1:%\d+]] = OpCompositeConstruct %VSOutput [[v4f1]] [[v3u1]] [[v2i1]] [[arr2bool1]] [[arr5i1]] [[matFloat1]]
  31. // CHECK-NEXT: OpStore %output4 [[flatConvert1]]
  32. VSOutput output4 = (VSOutput)1;
  33. // CHECK: [[x:%\d+]] = OpLoad %int %x
  34. // CHECK-NEXT: [[floatX:%\d+]] = OpConvertSToF %float [[x]]
  35. // CHECK-NEXT: [[v4fX:%\d+]] = OpCompositeConstruct %v4float [[floatX]] [[floatX]] [[floatX]] [[floatX]]
  36. // CHECK-NEXT: [[uintX:%\d+]] = OpBitcast %uint [[x]]
  37. // CHECK-NEXT: [[v3uX:%\d+]] = OpCompositeConstruct %v3uint [[uintX]] [[uintX]] [[uintX]]
  38. // CHECK-NEXT: [[v2iX:%\d+]] = OpCompositeConstruct %v2int [[x]] [[x]]
  39. // CHECK-NEXT: [[boolX:%\d+]] = OpINotEqual %bool [[x]] %int_0
  40. // CHECK-NEXT: [[arr2boolX:%\d+]] = OpCompositeConstruct %_arr_bool_uint_2 [[boolX]] [[boolX]]
  41. // CHECK-NEXT: [[arr5iX:%\d+]] = OpCompositeConstruct %_arr_int_uint_5 [[x]] [[x]] [[x]] [[x]] [[x]]
  42. // CHECK-NEXT: [[floatX2:%\d+]] = OpConvertSToF %float [[x]]
  43. // CHECK-NEXT: [[v3fX:%\d+]] = OpCompositeConstruct %v3float [[floatX2]] [[floatX2]] [[floatX2]]
  44. // CHECK-NEXT: [[matFloatX:%\d+]] = OpCompositeConstruct %mat2v3float [[v3fX]] [[v3fX]]
  45. // CHECK-NEXT: [[flatConvert2:%\d+]] = OpCompositeConstruct %VSOutput [[v4fX]] [[v3uX]] [[v2iX]] [[arr2boolX]] [[arr5iX]] [[matFloatX]]
  46. // CHECK-NEXT: OpStore %output5 [[flatConvert2]]
  47. VSOutput output5 = (VSOutput)x;
  48. // CHECK: [[v4f1_5:%\d+]] = OpCompositeConstruct %v4float %float_1_5 %float_1_5 %float_1_5 %float_1_5
  49. // CHECK-NEXT: [[u1_5:%\d+]] = OpConvertFToU %uint %float_1_5
  50. // CHECK-NEXT: [[v3u1_5:%\d+]] = OpCompositeConstruct %v3uint [[u1_5]] [[u1_5]] [[u1_5]]
  51. // CHECK-NEXT: [[i1_5:%\d+]] = OpConvertFToS %int %float_1_5
  52. // CHECK-NEXT: [[v2i1_5:%\d+]] = OpCompositeConstruct %v2int [[i1_5]] [[i1_5]]
  53. // CHECK-NEXT: [[bool1_5:%\d+]] = OpFOrdNotEqual %bool %float_1_5 %float_0
  54. // CHECK-NEXT: [[arr2bool_1_5:%\d+]] = OpCompositeConstruct %_arr_bool_uint_2 [[bool1_5]] [[bool1_5]]
  55. // CHECK-NEXT: [[i1_5:%\d+]] = OpConvertFToS %int %float_1_5
  56. // CHECK-NEXT: [[arr5i1_5:%\d+]] = OpCompositeConstruct %_arr_int_uint_5 [[i1_5]] [[i1_5]] [[i1_5]] [[i1_5]] [[i1_5]]
  57. // CHECK-NEXT: [[v3f_1_5:%\d+]] = OpCompositeConstruct %v3float %float_1_5 %float_1_5 %float_1_5
  58. // CHECK-NEXT: [[matFloat_1_5:%\d+]] = OpCompositeConstruct %mat2v3float [[v3f_1_5]] [[v3f_1_5]]
  59. // CHECK-NEXT: {{%\d+}} = OpCompositeConstruct %VSOutput [[v4f1_5]] [[v3u1_5]] [[v2i1_5]] [[arr2bool_1_5]] [[arr5i1_5]] [[matFloat_1_5]]
  60. VSOutput output6 = (VSOutput)1.5;
  61. // CHECK: [[float_true:%\d+]] = OpSelect %float %true %float_1 %float_0
  62. // CHECK-NEXT: [[v4f_true:%\d+]] = OpCompositeConstruct %v4float [[float_true]] [[float_true]] [[float_true]] [[float_true]]
  63. // CHECK-NEXT: [[uint_true:%\d+]] = OpSelect %uint %true %uint_1 %uint_0
  64. // CHECK-NEXT: [[v3u_true:%\d+]] = OpCompositeConstruct %v3uint [[uint_true]] [[uint_true]] [[uint_true]]
  65. // CHECK-NEXT: [[int_true:%\d+]] = OpSelect %int %true %int_1 %int_0
  66. // CHECK-NEXT: [[v2i_true:%\d+]] = OpCompositeConstruct %v2int [[int_true]] [[int_true]]
  67. // CHECK-NEXT: [[arr2_true:%\d+]] = OpCompositeConstruct %_arr_bool_uint_2 %true %true
  68. // CHECK-NEXT: [[int_true:%\d+]] = OpSelect %int %true %int_1 %int_0
  69. // CHECK-NEXT: [[arr5i_true:%\d+]] = OpCompositeConstruct %_arr_int_uint_5 [[int_true]] [[int_true]] [[int_true]] [[int_true]] [[int_true]]
  70. // CHECK-NEXT: [[float_true:%\d+]] = OpSelect %float %true %float_1 %float_0
  71. // CHECK-NEXT: [[v3f_true:%\d+]] = OpCompositeConstruct %v3float [[float_true]] [[float_true]] [[float_true]]
  72. // CHECK-NEXT:[[mat2v3_true:%\d+]] = OpCompositeConstruct %mat2v3float [[v3f_true]] [[v3f_true]]
  73. // CHECK-NEXT: {{%\d+}} = OpCompositeConstruct %VSOutput [[v4f_true]] [[v3u_true]] [[v2i_true]] [[arr2_true]] [[arr5i_true]] [[mat2v3_true]]
  74. VSOutput output7 = (VSOutput)true;
  75. }