xref: /llvm-project/clang/test/CodeGenHLSL/builtins/StructuredBuffer-elementtype.hlsl (revision bd92e46204331b9af296f53abb708317e72ab7a8)
1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.2-compute -finclude-default-header -fnative-half-type -emit-llvm -o - %s | FileCheck %s
2
3// CHECK: %"class.hlsl::StructuredBuffer" = type { target("dx.RawBuffer", i16, 0, 0) }
4// CHECK: %"class.hlsl::StructuredBuffer.0" = type { target("dx.RawBuffer", i16, 0, 0) }
5// CHECK: %"class.hlsl::StructuredBuffer.1" = type { target("dx.RawBuffer", i32, 0, 0) }
6// CHECK: %"class.hlsl::StructuredBuffer.2" = type { target("dx.RawBuffer", i32, 0, 0) }
7// CHECK: %"class.hlsl::StructuredBuffer.3" = type { target("dx.RawBuffer", i64, 0, 0) }
8// CHECK: %"class.hlsl::StructuredBuffer.4" = type { target("dx.RawBuffer", i64, 0, 0) }
9// CHECK: %"class.hlsl::StructuredBuffer.5" = type { target("dx.RawBuffer", half, 0, 0) }
10// CHECK: %"class.hlsl::StructuredBuffer.6" = type { target("dx.RawBuffer", float, 0, 0) }
11// CHECK: %"class.hlsl::StructuredBuffer.7" = type { target("dx.RawBuffer", double, 0, 0) }
12// CHECK: %"class.hlsl::StructuredBuffer.8" = type { target("dx.RawBuffer", <4 x i16>, 0, 0) }
13// CHECK: %"class.hlsl::StructuredBuffer.9" = type { target("dx.RawBuffer", <3 x i32>, 0, 0) }
14// CHECK: %"class.hlsl::StructuredBuffer.10" = type { target("dx.RawBuffer", <2 x half>, 0, 0) }
15// CHECK: %"class.hlsl::StructuredBuffer.11" = type { target("dx.RawBuffer", <3 x float>, 0, 0) }
16
17StructuredBuffer<int16_t> BufI16;
18StructuredBuffer<uint16_t> BufU16;
19StructuredBuffer<int> BufI32;
20StructuredBuffer<uint> BufU32;
21StructuredBuffer<int64_t> BufI64;
22StructuredBuffer<uint64_t> BufU64;
23StructuredBuffer<half> BufF16;
24StructuredBuffer<float> BufF32;
25StructuredBuffer<double> BufF64;
26StructuredBuffer< vector<int16_t, 4> > BufI16x4;
27StructuredBuffer< vector<uint, 3> > BufU32x3;
28StructuredBuffer<half2> BufF16x2;
29StructuredBuffer<float3> BufF32x3;
30// TODO: StructuredBuffer<snorm half> BufSNormF16;
31// TODO: StructuredBuffer<unorm half> BufUNormF16;
32// TODO: StructuredBuffer<snorm float> BufSNormF32;
33// TODO: StructuredBuffer<unorm float> BufUNormF32;
34// TODO: StructuredBuffer<snorm double> BufSNormF64;
35// TODO: StructuredBuffer<unorm double> BufUNormF64;
36
37[numthreads(1,1,1)]
38void main(int GI : SV_GroupIndex) {
39  int16_t v1 = BufI16[GI];
40  uint16_t v2 = BufU16[GI];
41  int v3 = BufI32[GI];
42  uint v4 = BufU32[GI];
43  int64_t v5 = BufI64[GI];
44  uint64_t v6 = BufU64[GI];
45  half v7 = BufF16[GI];
46  float v8 = BufF32[GI];
47  double v9 = BufF64[GI];
48  vector<int16_t,4> v10 = BufI16x4[GI];
49  vector<int, 3> v11 = BufU32x3[GI];
50  half2 v12 = BufF16x2[GI];
51  float3 v13 = BufF32x3[GI];
52}
53