struct_buf5.hlsl 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // RUN: %dxilver 1.2 | %dxc -E main -T ps_6_2 -enable-16bit-types %s | FileCheck %s
  2. // CHECK: call %dx.types.ResRet.i16 @dx.op.rawBufferLoad.i16
  3. // CHECK: call %dx.types.ResRet.i16 @dx.op.rawBufferLoad.i16
  4. // CHECK: call %dx.types.ResRet.i16 @dx.op.rawBufferLoad.i16
  5. // CHECK: call %dx.types.ResRet.i16 @dx.op.rawBufferLoad.i16
  6. // CHECK: call %dx.types.ResRet.i16 @dx.op.rawBufferLoad.i16
  7. // CHECK: call %dx.types.ResRet.i16 @dx.op.rawBufferLoad.i16
  8. // CHECK: call %dx.types.ResRet.i16 @dx.op.rawBufferLoad.i16
  9. // CHECK: call %dx.types.ResRet.i16 @dx.op.rawBufferLoad.i16
  10. // CHECK: call %dx.types.ResRet.f16 @dx.op.rawBufferLoad.f16
  11. // CHECK: call %dx.types.ResRet.f16 @dx.op.rawBufferLoad.f16
  12. // CHECK: call %dx.types.ResRet.f16 @dx.op.rawBufferLoad.f16
  13. // CHECK: call %dx.types.ResRet.f16 @dx.op.rawBufferLoad.f16
  14. // CHECK: call void @dx.op.rawBufferStore.i16
  15. // CHECK: call void @dx.op.rawBufferStore.i16
  16. struct MyStruct {
  17. min16int mi1;
  18. min16int2 mi2;
  19. min16int3 mi3;
  20. min16int4 mi4;
  21. min16uint mu1;
  22. min16uint2 mu2;
  23. min16uint3 mu3;
  24. min16uint4 mu4;
  25. min16float mf1;
  26. min16float2 mf2;
  27. min16float3 mf3;
  28. min16float4 mf4;
  29. };
  30. StructuredBuffer<MyStruct> buf1;
  31. RWStructuredBuffer<MyStruct> buf2;
  32. int4 main(float idx1 : IDX1, float idx2 : IDX2) : SV_Target {
  33. uint status;
  34. min16uint4 r = 0;
  35. r.x += buf2.Load(idx2, status).mi1;
  36. r.xy += buf2.Load(idx2, status).mi2;
  37. r.xyz += buf2.Load(idx2, status).mi3;
  38. r.xyzw += buf2.Load(idx2, status).mi4;
  39. r.x += buf2.Load(idx2, status).mu1;
  40. r.xy += buf2.Load(idx2, status).mu2;
  41. r.xyz += buf2.Load(idx2, status).mu3;
  42. r.xyzw += buf2.Load(idx2, status).mu4;
  43. r.x += buf2.Load(idx2, status).mf1;
  44. r.xy += buf2.Load(idx2, status).mf2;
  45. r.xyz += buf2.Load(idx2, status).mf3;
  46. r.xyzw += buf2.Load(idx2, status).mf4;
  47. buf2[0].mi4 = r;
  48. buf2[0].mu4 = (min16uint4)r;
  49. return r;
  50. }