1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.2-compute -finclude-default-header -fnative-half-type -emit-llvm -o - %s | FileCheck %s -check-prefixes=DXIL 2// RUN: %clang_cc1 -triple spirv-pc-vulkan-compute -finclude-default-header -fnative-half-type -emit-llvm -o - %s | FileCheck %s -check-prefixes=SPIRV 3 4// DXIL: %"class.hlsl::RWBuffer" = type { target("dx.TypedBuffer", i16, 1, 0, 1) } 5// DXIL: %"class.hlsl::RWBuffer.0" = type { target("dx.TypedBuffer", i16, 1, 0, 0) } 6// DXIL: %"class.hlsl::RWBuffer.1" = type { target("dx.TypedBuffer", i32, 1, 0, 1) } 7// DXIL: %"class.hlsl::RWBuffer.2" = type { target("dx.TypedBuffer", i32, 1, 0, 0) } 8// DXIL: %"class.hlsl::RWBuffer.3" = type { target("dx.TypedBuffer", i64, 1, 0, 1) } 9// DXIL: %"class.hlsl::RWBuffer.4" = type { target("dx.TypedBuffer", i64, 1, 0, 0) } 10// DXIL: %"class.hlsl::RWBuffer.5" = type { target("dx.TypedBuffer", half, 1, 0, 0) } 11// DXIL: %"class.hlsl::RWBuffer.6" = type { target("dx.TypedBuffer", float, 1, 0, 0) } 12// DXIL: %"class.hlsl::RWBuffer.7" = type { target("dx.TypedBuffer", double, 1, 0, 0) } 13// DXIL: %"class.hlsl::RWBuffer.8" = type { target("dx.TypedBuffer", <4 x i16>, 1, 0, 0) } 14// DXIL: %"class.hlsl::RWBuffer.9" = type { target("dx.TypedBuffer", <3 x i32>, 1, 0, 0) } 15// DXIL: %"class.hlsl::RWBuffer.10" = type { target("dx.TypedBuffer", <2 x half>, 1, 0, 0) } 16// DXIL: %"class.hlsl::RWBuffer.11" = type { target("dx.TypedBuffer", <3 x float>, 1, 0, 0) } 17 18// SPIRV: %"class.hlsl::RWBuffer" = type { target("spirv.Image", i16, 5, 2, 0, 0, 2, 0) } 19// SPIRV: %"class.hlsl::RWBuffer.0" = type { target("spirv.Image", i16, 5, 2, 0, 0, 2, 0) } 20// SPIRV: %"class.hlsl::RWBuffer.1" = type { target("spirv.Image", i32, 5, 2, 0, 0, 2, 0) } 21// SPIRV: %"class.hlsl::RWBuffer.2" = type { target("spirv.Image", i32, 5, 2, 0, 0, 2, 0) } 22// SPIRV: %"class.hlsl::RWBuffer.3" = type { target("spirv.Image", i64, 5, 2, 0, 0, 2, 0) } 23// SPIRV: %"class.hlsl::RWBuffer.4" = type { target("spirv.Image", i64, 5, 2, 0, 0, 2, 0) } 24// SPIRV: %"class.hlsl::RWBuffer.5" = type { target("spirv.Image", half, 5, 2, 0, 0, 2, 0) } 25// SPIRV: %"class.hlsl::RWBuffer.6" = type { target("spirv.Image", float, 5, 2, 0, 0, 2, 0) } 26// SPIRV: %"class.hlsl::RWBuffer.7" = type { target("spirv.Image", double, 5, 2, 0, 0, 2, 0) } 27// SPIRV: %"class.hlsl::RWBuffer.8" = type { target("spirv.Image", i16, 5, 2, 0, 0, 2, 0) } 28// SPIRV: %"class.hlsl::RWBuffer.9" = type { target("spirv.Image", i32, 5, 2, 0, 0, 2, 0) } 29// SPIRV: %"class.hlsl::RWBuffer.10" = type { target("spirv.Image", half, 5, 2, 0, 0, 2, 0) } 30// SPIRV: %"class.hlsl::RWBuffer.11" = type { target("spirv.Image", float, 5, 2, 0, 0, 2, 0) } 31 32 33 34RWBuffer<int16_t> BufI16; 35RWBuffer<uint16_t> BufU16; 36RWBuffer<int> BufI32; 37RWBuffer<uint> BufU32; 38RWBuffer<int64_t> BufI64; 39RWBuffer<uint64_t> BufU64; 40RWBuffer<half> BufF16; 41RWBuffer<float> BufF32; 42RWBuffer<double> BufF64; 43RWBuffer< vector<int16_t, 4> > BufI16x4; 44RWBuffer< vector<uint, 3> > BufU32x3; 45RWBuffer<half2> BufF16x2; 46RWBuffer<float3> BufF32x3; 47// TODO: RWBuffer<snorm half> BufSNormF16; -> 11 48// TODO: RWBuffer<unorm half> BufUNormF16; -> 12 49// TODO: RWBuffer<snorm float> BufSNormF32; -> 13 50// TODO: RWBuffer<unorm float> BufUNormF32; -> 14 51// TODO: RWBuffer<snorm double> BufSNormF64; -> 15 52// TODO: RWBuffer<unorm double> BufUNormF64; -> 16 53 54[numthreads(1,1,1)] 55void main(int GI : SV_GroupIndex) { 56 BufI16[GI] = 0; 57 BufU16[GI] = 0; 58 BufI32[GI] = 0; 59 BufU32[GI] = 0; 60 BufI64[GI] = 0; 61 BufU64[GI] = 0; 62 BufF16[GI] = 0; 63 BufF32[GI] = 0; 64 BufF64[GI] = 0; 65 BufI16x4[GI] = 0; 66 BufU32x3[GI] = 0; 67 BufF16x2[GI] = 0; 68 BufF32x3[GI] = 0; 69} 70