op.vector.swizzle.buffer-access.hlsl 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. // Run: %dxc -T ps_6_0 -E main
  2. Buffer<float> myBuffer1;
  3. Buffer<float3> myBuffer3;
  4. float4 main(in float4 pos : SV_Position) : SV_Target0
  5. {
  6. uint index = (uint)pos.x;
  7. // CHECK: [[img:%\d+]] = OpLoad %type_buffer_image %myBuffer1
  8. // CHECK-NEXT: [[fetch:%\d+]] = OpImageFetch %v4float [[img]] {{%\d+}}
  9. // CHECK-NEXT: [[val:%\d+]] = OpCompositeExtract %float [[fetch]] 0
  10. // CHECK-NEXT: OpStore %a [[val]]
  11. float a = myBuffer1[index].x;
  12. // CHECK: [[img:%\d+]] = OpLoad %type_buffer_image %myBuffer1
  13. // CHECK-NEXT: [[fetch:%\d+]] = OpImageFetch %v4float [[img]] {{%\d+}}
  14. // CHECK-NEXT: [[ex:%\d+]] = OpCompositeExtract %float [[fetch]] 0
  15. // CHECK-NEXT: [[val:%\d+]] = OpCompositeConstruct %v2float [[ex]] [[ex]]
  16. // CHECK-NEXT: OpStore %b [[val]]
  17. float2 b = myBuffer1[index].xx;
  18. // CHECK: [[img:%\d+]] = OpLoad %type_buffer_image_0 %myBuffer3
  19. // CHECK-NEXT: [[fetch:%\d+]] = OpImageFetch %v4float [[img]] {{%\d+}}
  20. // CHECK-NEXT: [[val:%\d+]] = OpVectorShuffle %v3float [[fetch]] [[fetch]] 0 1 2
  21. // CHECK-NEXT: OpStore %c [[val]]
  22. float3 c = myBuffer3[index].xyz;
  23. // CHECK: [[img:%\d+]] = OpLoad %type_buffer_image_0 %myBuffer3
  24. // CHECK-NEXT: [[fetch:%\d+]] = OpImageFetch %v4float [[img]] {{%\d+}}
  25. // CHECK-NEXT: [[val:%\d+]] = OpVectorShuffle %v3float [[fetch]] [[fetch]] 0 1 2
  26. // CHECK-NEXT: [[d:%\d+]] = OpVectorShuffle %v4float [[val]] [[val]] 1 1 0 2
  27. // CHECK-NEXT: OpStore %d [[d]]
  28. float4 d = myBuffer3[index].yyxz;
  29. return float4(c, a) + d + float4(b, b);
  30. }