method.rwtexture.get-dimensions.hlsl 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // Run: %dxc -T ps_6_0 -E main
  2. // CHECK: OpCapability ImageQuery
  3. RWTexture1D <float> t1;
  4. RWTexture1DArray <float> t2;
  5. RWTexture2D <float> t3;
  6. RWTexture2DArray <float> t4;
  7. RWTexture3D <float> t5;
  8. void main() {
  9. uint width, height, depth, elements;
  10. // CHECK: [[t1:%\d+]] = OpLoad %type_1d_image %t1
  11. // CHECK-NEXT: [[query1:%\d+]] = OpImageQuerySize %uint [[t1]]
  12. // CHECK-NEXT: OpStore %width [[query1]]
  13. t1.GetDimensions(width);
  14. // CHECK: [[t2:%\d+]] = OpLoad %type_1d_image_array %t2
  15. // CHECK-NEXT: [[query2:%\d+]] = OpImageQuerySize %v2uint [[t2]]
  16. // CHECK-NEXT: [[query2_0:%\d+]] = OpCompositeExtract %uint [[query2]] 0
  17. // CHECK-NEXT: OpStore %width [[query2_0]]
  18. // CHECK-NEXT: [[query2_1:%\d+]] = OpCompositeExtract %uint [[query2]] 1
  19. // CHECK-NEXT: OpStore %elements [[query2_1]]
  20. t2.GetDimensions(width, elements);
  21. // CHECK: [[t3:%\d+]] = OpLoad %type_2d_image %t3
  22. // CHECK-NEXT: [[query3:%\d+]] = OpImageQuerySize %v2uint [[t3]]
  23. // CHECK-NEXT: [[query3_0:%\d+]] = OpCompositeExtract %uint [[query3]] 0
  24. // CHECK-NEXT: OpStore %width [[query3_0]]
  25. // CHECK-NEXT: [[query3_1:%\d+]] = OpCompositeExtract %uint [[query3]] 1
  26. // CHECK-NEXT: OpStore %height [[query3_1]]
  27. t3.GetDimensions(width, height);
  28. // CHECK: [[t4:%\d+]] = OpLoad %type_2d_image_array %t4
  29. // CHECK-NEXT: [[query4:%\d+]] = OpImageQuerySize %v3uint [[t4]]
  30. // CHECK-NEXT: [[query4_0:%\d+]] = OpCompositeExtract %uint [[query4]] 0
  31. // CHECK-NEXT: OpStore %width [[query4_0]]
  32. // CHECK-NEXT: [[query4_1:%\d+]] = OpCompositeExtract %uint [[query4]] 1
  33. // CHECK-NEXT: OpStore %height [[query4_1]]
  34. // CHECK-NEXT: [[query4_2:%\d+]] = OpCompositeExtract %uint [[query4]] 2
  35. // CHECK-NEXT: OpStore %elements [[query4_2]]
  36. t4.GetDimensions(width, height, elements);
  37. // CHECK: [[t5:%\d+]] = OpLoad %type_3d_image %t5
  38. // CHECK-NEXT: [[query5:%\d+]] = OpImageQuerySize %v3uint [[t5]]
  39. // CHECK-NEXT: [[query5_0:%\d+]] = OpCompositeExtract %uint [[query5]] 0
  40. // CHECK-NEXT: OpStore %width [[query5_0]]
  41. // CHECK-NEXT: [[query5_1:%\d+]] = OpCompositeExtract %uint [[query5]] 1
  42. // CHECK-NEXT: OpStore %height [[query5_1]]
  43. // CHECK-NEXT: [[query5_2:%\d+]] = OpCompositeExtract %uint [[query5]] 2
  44. // CHECK-NEXT: OpStore %depth [[query5_2]]
  45. t5.GetDimensions(width, height, depth);
  46. // Overloads with float output arg.
  47. float f_width, f_height, f_depth, f_elements;
  48. // CHECK: [[t1:%\d+]] = OpLoad %type_1d_image %t1
  49. // CHECK-NEXT: [[query1:%\d+]] = OpImageQuerySize %uint [[t1]]
  50. // CHECK-NEXT: [[f_query1:%\d+]] = OpConvertUToF %float [[query1]]
  51. // CHECK-NEXT: OpStore %f_width [[f_query1]]
  52. t1.GetDimensions(f_width);
  53. // CHECK: [[t2:%\d+]] = OpLoad %type_1d_image_array %t2
  54. // CHECK-NEXT: [[query2:%\d+]] = OpImageQuerySize %v2uint [[t2]]
  55. // CHECK-NEXT: [[query2_0:%\d+]] = OpCompositeExtract %uint [[query2]] 0
  56. // CHECK-NEXT:[[fquery2_0:%\d+]] = OpConvertUToF %float [[query2_0]]
  57. // CHECK-NEXT: OpStore %f_width [[fquery2_0]]
  58. // CHECK-NEXT: [[query2_1:%\d+]] = OpCompositeExtract %uint [[query2]] 1
  59. // CHECK-NEXT:[[fquery2_1:%\d+]] = OpConvertUToF %float [[query2_1]]
  60. // CHECK-NEXT: OpStore %f_elements [[fquery2_1]]
  61. t2.GetDimensions(f_width, f_elements);
  62. // CHECK: [[t3:%\d+]] = OpLoad %type_2d_image %t3
  63. // CHECK-NEXT: [[query3:%\d+]] = OpImageQuerySize %v2uint [[t3]]
  64. // CHECK-NEXT: [[query3_0:%\d+]] = OpCompositeExtract %uint [[query3]] 0
  65. // CHECK-NEXT:[[fquery3_0:%\d+]] = OpConvertUToF %float [[query3_0]]
  66. // CHECK-NEXT: OpStore %f_width [[fquery3_0]]
  67. // CHECK-NEXT: [[query3_1:%\d+]] = OpCompositeExtract %uint [[query3]] 1
  68. // CHECK-NEXT:[[fquery3_1:%\d+]] = OpConvertUToF %float [[query3_1]]
  69. // CHECK-NEXT: OpStore %f_height [[fquery3_1]]
  70. t3.GetDimensions(f_width, f_height);
  71. // CHECK: [[t4:%\d+]] = OpLoad %type_2d_image_array %t4
  72. // CHECK-NEXT: [[query4:%\d+]] = OpImageQuerySize %v3uint [[t4]]
  73. // CHECK-NEXT: [[query4_0:%\d+]] = OpCompositeExtract %uint [[query4]] 0
  74. // CHECK-NEXT:[[fquery4_0:%\d+]] = OpConvertUToF %float [[query4_0]]
  75. // CHECK-NEXT: OpStore %f_width [[fquery4_0]]
  76. // CHECK-NEXT: [[query4_1:%\d+]] = OpCompositeExtract %uint [[query4]] 1
  77. // CHECK-NEXT:[[fquery4_1:%\d+]] = OpConvertUToF %float [[query4_1]]
  78. // CHECK-NEXT: OpStore %f_height [[fquery4_1]]
  79. // CHECK-NEXT: [[query4_2:%\d+]] = OpCompositeExtract %uint [[query4]] 2
  80. // CHECK-NEXT:[[fquery4_2:%\d+]] = OpConvertUToF %float [[query4_2]]
  81. // CHECK-NEXT: OpStore %f_elements [[fquery4_2]]
  82. t4.GetDimensions(f_width, f_height, f_elements);
  83. // CHECK: [[t5:%\d+]] = OpLoad %type_3d_image %t5
  84. // CHECK-NEXT: [[query5:%\d+]] = OpImageQuerySize %v3uint [[t5]]
  85. // CHECK-NEXT: [[query5_0:%\d+]] = OpCompositeExtract %uint [[query5]] 0
  86. // CHECK-NEXT:[[fquery5_0:%\d+]] = OpConvertUToF %float [[query5_0]]
  87. // CHECK-NEXT: OpStore %f_width [[fquery5_0]]
  88. // CHECK-NEXT: [[query5_1:%\d+]] = OpCompositeExtract %uint [[query5]] 1
  89. // CHECK-NEXT:[[fquery5_1:%\d+]] = OpConvertUToF %float [[query5_1]]
  90. // CHECK-NEXT: OpStore %f_height [[fquery5_1]]
  91. // CHECK-NEXT: [[query5_2:%\d+]] = OpCompositeExtract %uint [[query5]] 2
  92. // CHECK-NEXT:[[fquery5_2:%\d+]] = OpConvertUToF %float [[query5_2]]
  93. // CHECK-NEXT: OpStore %f_depth [[fquery5_2]]
  94. t5.GetDimensions(f_width, f_height, f_depth);
  95. }