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 3struct MyStruct { 4 float4 a; 5 int2 b; 6}; 7 8// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer" = type { target("dx.RawBuffer", i16, 1, 1) } 9// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.0" = type { target("dx.RawBuffer", i16, 1, 1) } 10// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.1" = type { target("dx.RawBuffer", i32, 1, 1) } 11// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.2" = type { target("dx.RawBuffer", i32, 1, 1) } 12// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.3" = type { target("dx.RawBuffer", i64, 1, 1) } 13// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.4" = type { target("dx.RawBuffer", i64, 1, 1) } 14// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.5" = type { target("dx.RawBuffer", half, 1, 1) } 15// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.6" = type { target("dx.RawBuffer", float, 1, 1) } 16// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.7" = type { target("dx.RawBuffer", double, 1, 1) } 17// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.8" = type { target("dx.RawBuffer", <4 x i16>, 1, 1) } 18// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.9" = type { target("dx.RawBuffer", <3 x i32>, 1, 1) } 19// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.10" = type { target("dx.RawBuffer", <2 x half>, 1, 1) } 20// DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer.11" = type { target("dx.RawBuffer", <3 x float>, 1, 1) } 21// DXIL: %struct.MyStruct = type { <4 x float>, <2 x i32>, [8 x i8] } 22 23RasterizerOrderedStructuredBuffer<int16_t> BufI16; 24RasterizerOrderedStructuredBuffer<uint16_t> BufU16; 25RasterizerOrderedStructuredBuffer<int> BufI32; 26RasterizerOrderedStructuredBuffer<uint> BufU32; 27RasterizerOrderedStructuredBuffer<int64_t> BufI64; 28RasterizerOrderedStructuredBuffer<uint64_t> BufU64; 29RasterizerOrderedStructuredBuffer<half> BufF16; 30RasterizerOrderedStructuredBuffer<float> BufF32; 31RasterizerOrderedStructuredBuffer<double> BufF64; 32RasterizerOrderedStructuredBuffer< vector<int16_t, 4> > BufI16x4; 33RasterizerOrderedStructuredBuffer< vector<uint, 3> > BufU32x3; 34RasterizerOrderedStructuredBuffer<half2> BufF16x2; 35RasterizerOrderedStructuredBuffer<float3> BufF32x3; 36// TODO: RasterizerOrderedStructuredBuffer<snorm half> BufSNormF16; 37// TODO: RasterizerOrderedStructuredBuffer<unorm half> BufUNormF16; 38// TODO: RasterizerOrderedStructuredBuffer<snorm float> BufSNormF32; 39// TODO: RasterizerOrderedStructuredBuffer<unorm float> BufUNormF32; 40// TODO: RasterizerOrderedStructuredBuffer<snorm double> BufSNormF64; 41// TODO: RasterizerOrderedStructuredBuffer<unorm double> BufUNormF64; 42RasterizerOrderedStructuredBuffer<MyStruct> BufMyStruct; 43 44[numthreads(1,1,1)] 45void main(int GI : SV_GroupIndex) { 46 BufI16[GI] = 0; 47 BufU16[GI] = 0; 48 BufI32[GI] = 0; 49 BufU32[GI] = 0; 50 BufI64[GI] = 0; 51 BufU64[GI] = 0; 52 BufF16[GI] = 0; 53 BufF32[GI] = 0; 54 BufF64[GI] = 0; 55 BufI16x4[GI] = 0; 56 BufU32x3[GI] = 0; 57 BufF16x2[GI] = 0; 58 BufF32x3[GI] = 0; 59 BufMyStruct[GI] = {{0,0,0,0},{0,0}}; 60} 61