|
| 1 | +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.2-compute -finclude-default-header -fnative-half-type \ |
| 2 | +// RUN: -emit-llvm -o - -DRESOURCE=Buffer %s | FileCheck %s -DRESOURCE=Buffer -DRW=0 -check-prefixes=DXIL |
| 3 | + |
| 4 | +// RUN: %clang_cc1 -triple spirv-pc-vulkan-compute -finclude-default-header -fnative-half-type \ |
| 5 | +// RUN: -emit-llvm -o - -DRESOURCE=Buffer %s | FileCheck %s -DRESOURCE=Buffer -DRW=1 -check-prefixes=SPV-RO |
| 6 | + |
| 7 | +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.2-compute -finclude-default-header -fnative-half-type \ |
| 8 | +// RUN: -emit-llvm -o - -DRESOURCE=RWBuffer %s | FileCheck %s -DRESOURCE=RWBuffer -DRW=1 -check-prefixes=DXIL |
| 9 | + |
| 10 | +// RUN: %clang_cc1 -triple spirv-pc-vulkan-compute -finclude-default-header -fnative-half-type \ |
| 11 | +// RUN: -emit-llvm -o - -DRESOURCE=RWBuffer %s | FileCheck %s -DRESOURCE=RWBuffer --DRW=2 -check-prefixes=SPV-RW |
| 12 | + |
| 13 | +// DXIL: %"class.hlsl::[[RESOURCE]]" = type { target("dx.TypedBuffer", i16, [[RW]], 0, 1) } |
| 14 | +// DXIL: %"class.hlsl::[[RESOURCE]].0" = type { target("dx.TypedBuffer", i16, [[RW]], 0, 0) } |
| 15 | +// DXIL: %"class.hlsl::[[RESOURCE]].1" = type { target("dx.TypedBuffer", i32, [[RW]], 0, 1) } |
| 16 | +// DXIL: %"class.hlsl::[[RESOURCE]].2" = type { target("dx.TypedBuffer", i32, [[RW]], 0, 0) } |
| 17 | +// DXIL: %"class.hlsl::[[RESOURCE]].3" = type { target("dx.TypedBuffer", i64, [[RW]], 0, 1) } |
| 18 | +// DXIL: %"class.hlsl::[[RESOURCE]].4" = type { target("dx.TypedBuffer", i64, [[RW]], 0, 0) } |
| 19 | +// DXIL: %"class.hlsl::[[RESOURCE]].5" = type { target("dx.TypedBuffer", half, [[RW]], 0, 0) } |
| 20 | +// DXIL: %"class.hlsl::[[RESOURCE]].6" = type { target("dx.TypedBuffer", float, [[RW]], 0, 0) } |
| 21 | +// DXIL: %"class.hlsl::[[RESOURCE]].7" = type { target("dx.TypedBuffer", double, [[RW]], 0, 0) } |
| 22 | +// DXIL: %"class.hlsl::[[RESOURCE]].8" = type { target("dx.TypedBuffer", <4 x i16>, [[RW]], 0, 1) } |
| 23 | +// DXIL: %"class.hlsl::[[RESOURCE]].9" = type { target("dx.TypedBuffer", <3 x i32>, [[RW]], 0, 0) } |
| 24 | +// DXIL: %"class.hlsl::[[RESOURCE]].10" = type { target("dx.TypedBuffer", <2 x half>, [[RW]], 0, 0) } |
| 25 | +// DXIL: %"class.hlsl::[[RESOURCE]].11" = type { target("dx.TypedBuffer", <3 x float>, [[RW]], 0, 0) } |
| 26 | +// DXIL: %"class.hlsl::[[RESOURCE]].12" = type { target("dx.TypedBuffer", <4 x i32>, [[RW]], 0, 1) } |
| 27 | + |
| 28 | +// SPV-RO: %"class.hlsl::[[RESOURCE]]" = type { target("spirv.SignedImage", i16, 5, 2, 0, 0, 1, 0) } |
| 29 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].0" = type { target("spirv.Image", i16, 5, 2, 0, 0, 1, 0) } |
| 30 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].1" = type { target("spirv.SignedImage", i32, 5, 2, 0, 0, 1, 0) } |
| 31 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].2" = type { target("spirv.Image", i32, 5, 2, 0, 0, 1, 0) } |
| 32 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].3" = type { target("spirv.SignedImage", i64, 5, 2, 0, 0, 1, 0) } |
| 33 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].4" = type { target("spirv.Image", i64, 5, 2, 0, 0, 1, 0) } |
| 34 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].5" = type { target("spirv.Image", half, 5, 2, 0, 0, 1, 0) } |
| 35 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].6" = type { target("spirv.Image", float, 5, 2, 0, 0, 1, 0) } |
| 36 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].7" = type { target("spirv.Image", double, 5, 2, 0, 0, 1, 0) } |
| 37 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].8" = type { target("spirv.SignedImage", i16, 5, 2, 0, 0, 1, 0) } |
| 38 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].9" = type { target("spirv.Image", i32, 5, 2, 0, 0, 1, 0) } |
| 39 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].10" = type { target("spirv.Image", half, 5, 2, 0, 0, 1, 0) } |
| 40 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].11" = type { target("spirv.Image", float, 5, 2, 0, 0, 1, 0) } |
| 41 | +// SPV-RO: %"class.hlsl::[[RESOURCE]].12" = type { target("spirv.SignedImage", i32, 5, 2, 0, 0, 1, 0) } |
| 42 | + |
| 43 | +// SPV-RW: %"class.hlsl::[[RESOURCE]]" = type { target("spirv.SignedImage", i16, 5, 2, 0, 0, 2, 0) } |
| 44 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].0" = type { target("spirv.Image", i16, 5, 2, 0, 0, 2, 0) } |
| 45 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].1" = type { target("spirv.SignedImage", i32, 5, 2, 0, 0, 2, 24) } |
| 46 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].2" = type { target("spirv.Image", i32, 5, 2, 0, 0, 2, 33) } |
| 47 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].3" = type { target("spirv.SignedImage", i64, 5, 2, 0, 0, 2, 41) } |
| 48 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].4" = type { target("spirv.Image", i64, 5, 2, 0, 0, 2, 40) } |
| 49 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].5" = type { target("spirv.Image", half, 5, 2, 0, 0, 2, 0) } |
| 50 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].6" = type { target("spirv.Image", float, 5, 2, 0, 0, 2, 3) } |
| 51 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].7" = type { target("spirv.Image", double, 5, 2, 0, 0, 2, 0) } |
| 52 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].8" = type { target("spirv.SignedImage", i16, 5, 2, 0, 0, 2, 0) } |
| 53 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].9" = type { target("spirv.Image", i32, 5, 2, 0, 0, 2, 0) } |
| 54 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].10" = type { target("spirv.Image", half, 5, 2, 0, 0, 2, 0) } |
| 55 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].11" = type { target("spirv.Image", float, 5, 2, 0, 0, 2, 0) } |
| 56 | +// SPV-RW: %"class.hlsl::[[RESOURCE]].12" = type { target("spirv.SignedImage", i32, 5, 2, 0, 0, 2, 21) } |
| 57 | + |
| 58 | +RESOURCE<int16_t> BufI16; |
| 59 | +RESOURCE<uint16_t> BufU16; |
| 60 | +RESOURCE<int> BufI32; |
| 61 | +RESOURCE<uint> BufU32; |
| 62 | +RESOURCE<int64_t> BufI64; |
| 63 | +RESOURCE<uint64_t> BufU64; |
| 64 | +RESOURCE<half> BufF16; |
| 65 | +RESOURCE<float> BufF32; |
| 66 | +RESOURCE<double> BufF64; |
| 67 | +RESOURCE< vector<int16_t, 4> > BufI16x4; |
| 68 | +RESOURCE< vector<uint, 3> > BufU32x3; |
| 69 | +RESOURCE<half2> BufF16x2; |
| 70 | +RESOURCE<float3> BufF32x3; |
| 71 | +RESOURCE<int4> BufI32x4; |
| 72 | +// TODO: RESOURCE<snorm half> BufSNormF16; -> 11 |
| 73 | +// TODO: RESOURCE<unorm half> BufUNormF16; -> 12 |
| 74 | +// TODO: RESOURCE<snorm float> BufSNormF32; -> 13 |
| 75 | +// TODO: RESOURCE<unorm float> BufUNormF32; -> 14 |
| 76 | +// TODO: RESOURCE<snorm double> BufSNormF64; -> 15 |
| 77 | +// TODO: RESOURCE<unorm double> BufUNormF64; -> 16 |
| 78 | + |
| 79 | +[numthreads(1,1,1)] |
| 80 | +void main(int GI : SV_GroupIndex) { |
| 81 | + int16_t v1 = BufI16[GI]; |
| 82 | + uint16_t v2 = BufU16[GI]; |
| 83 | + int v3 = BufI32[GI]; |
| 84 | + uint v4 = BufU32[GI]; |
| 85 | + int64_t v5 = BufI64[GI]; |
| 86 | + uint64_t v6 = BufU64[GI]; |
| 87 | + half v7 = BufF16[GI]; |
| 88 | + float v8 = BufF32[GI]; |
| 89 | + double v9 = BufF64[GI]; |
| 90 | + vector<int16_t,4> v10 = BufI16x4[GI]; |
| 91 | + vector<int, 3> v11 = BufU32x3[GI]; |
| 92 | + half2 v12 = BufF16x2[GI]; |
| 93 | + float3 v13 = BufF32x3[GI]; |
| 94 | +} |
0 commit comments