diff --git a/clang/lib/CodeGen/Targets/DirectX.cpp b/clang/lib/CodeGen/Targets/DirectX.cpp index 0c5fc6e0d9fb1..96a1284661394 100644 --- a/clang/lib/CodeGen/Targets/DirectX.cpp +++ b/clang/lib/CodeGen/Targets/DirectX.cpp @@ -52,7 +52,7 @@ llvm::Type *DirectXTargetCodeGenInfo::getHLSLType( return nullptr; // convert element type - llvm::Type *ElemType = CGM.getTypes().ConvertType(ContainedTy); + llvm::Type *ElemType = CGM.getTypes().ConvertTypeForMem(ContainedTy); llvm::StringRef TypeName = ResAttrs.RawBuffer ? "dx.RawBuffer" : "dx.TypedBuffer"; diff --git a/clang/test/CodeGenHLSL/builtins/AppendStructuredBuffer-elementtype.hlsl b/clang/test/CodeGenHLSL/builtins/AppendStructuredBuffer-elementtype.hlsl index 85face8eaeb6c..4eaebab1055b9 100644 --- a/clang/test/CodeGenHLSL/builtins/AppendStructuredBuffer-elementtype.hlsl +++ b/clang/test/CodeGenHLSL/builtins/AppendStructuredBuffer-elementtype.hlsl @@ -20,6 +20,8 @@ struct MyStruct { // DXIL: %"class.hlsl::AppendStructuredBuffer.11" = type { target("dx.RawBuffer", <3 x float>, 1, 0) // DXIL: %"class.hlsl::AppendStructuredBuffer.12" = type { target("dx.RawBuffer", %struct.MyStruct, 1, 0) // DXIL: %struct.MyStruct = type { <4 x float>, <2 x i32>, [8 x i8] } +// DXIL: %"class.hlsl::AppendStructuredBuffer.13" = type { target("dx.RawBuffer", i32, 1, 0) +// DXIL: %"class.hlsl::AppendStructuredBuffer.14" = type { target("dx.RawBuffer", <4 x i32>, 1, 0) AppendStructuredBuffer BufI16; AppendStructuredBuffer BufU16; @@ -41,6 +43,8 @@ AppendStructuredBuffer BufF32x3; // TODO: AppendStructuredBuffer BufSNormF64; // TODO: AppendStructuredBuffer BufUNormF64; AppendStructuredBuffer BufMyStruct; +AppendStructuredBuffer BufBool; +AppendStructuredBuffer BufBoolVec; [numthreads(1,1,1)] void main(int GI : SV_GroupIndex) { diff --git a/clang/test/CodeGenHLSL/builtins/ConsumeStructuredBuffer-elementtype.hlsl b/clang/test/CodeGenHLSL/builtins/ConsumeStructuredBuffer-elementtype.hlsl index 5ed9e9ad8160f..e06924c813058 100644 --- a/clang/test/CodeGenHLSL/builtins/ConsumeStructuredBuffer-elementtype.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ConsumeStructuredBuffer-elementtype.hlsl @@ -20,6 +20,8 @@ struct MyStruct { // DXIL: %"class.hlsl::ConsumeStructuredBuffer.11" = type { target("dx.RawBuffer", <3 x float>, 1, 0) // DXIL: %"class.hlsl::ConsumeStructuredBuffer.12" = type { target("dx.RawBuffer", %struct.MyStruct, 1, 0) // DXIL: %struct.MyStruct = type { <4 x float>, <2 x i32>, [8 x i8] } +// DXIL: %"class.hlsl::ConsumeStructuredBuffer.13" = type { target("dx.RawBuffer", i32, 1, 0) +// DXIL: %"class.hlsl::ConsumeStructuredBuffer.14" = type { target("dx.RawBuffer", <4 x i32>, 1, 0) ConsumeStructuredBuffer BufI16; ConsumeStructuredBuffer BufU16; @@ -41,6 +43,8 @@ ConsumeStructuredBuffer BufF32x3; // TODO: ConsumeStructuredBuffer BufSNormF64; // TODO: ConsumeStructuredBuffer BufUNormF64; ConsumeStructuredBuffer BufMyStruct; +ConsumeStructuredBuffer BufBool; +ConsumeStructuredBuffer BufBoolVec; [numthreads(1,1,1)] void main(int GI : SV_GroupIndex) { diff --git a/clang/test/CodeGenHLSL/builtins/RWStructuredBuffer-elementtype.hlsl b/clang/test/CodeGenHLSL/builtins/RWStructuredBuffer-elementtype.hlsl index f2f6956ce1541..e23859ee83d15 100644 --- a/clang/test/CodeGenHLSL/builtins/RWStructuredBuffer-elementtype.hlsl +++ b/clang/test/CodeGenHLSL/builtins/RWStructuredBuffer-elementtype.hlsl @@ -13,6 +13,8 @@ // CHECK: %"class.hlsl::RWStructuredBuffer.9" = type { target("dx.RawBuffer", <3 x i32>, 1, 0) } // CHECK: %"class.hlsl::RWStructuredBuffer.10" = type { target("dx.RawBuffer", <2 x half>, 1, 0) } // CHECK: %"class.hlsl::RWStructuredBuffer.11" = type { target("dx.RawBuffer", <3 x float>, 1, 0) } +// CHECK: %"class.hlsl::RWStructuredBuffer.12" = type { target("dx.RawBuffer", i32, 1, 0) } +// CHECK: %"class.hlsl::RWStructuredBuffer.13" = type { target("dx.RawBuffer", <4 x i32>, 1, 0) } RWStructuredBuffer BufI16; RWStructuredBuffer BufU16; @@ -27,6 +29,8 @@ RWStructuredBuffer< vector > BufI16x4; RWStructuredBuffer< vector > BufU32x3; RWStructuredBuffer BufF16x2; RWStructuredBuffer BufF32x3; +RWStructuredBuffer BufBool; +RWStructuredBuffer BufBoolVec; // TODO: RWStructuredBuffer BufSNormF16; // TODO: RWStructuredBuffer BufUNormF16; // TODO: RWStructuredBuffer BufSNormF32; @@ -49,4 +53,6 @@ void main(int GI : SV_GroupIndex) { BufU32x3[GI] = 0; BufF16x2[GI] = 0; BufF32x3[GI] = 0; + BufBool[GI] = false; + BufBool[GI] = false; } diff --git a/clang/test/CodeGenHLSL/builtins/StructuredBuffer-elementtype.hlsl b/clang/test/CodeGenHLSL/builtins/StructuredBuffer-elementtype.hlsl index d322cdc0d0645..6c69b2b34bb29 100644 --- a/clang/test/CodeGenHLSL/builtins/StructuredBuffer-elementtype.hlsl +++ b/clang/test/CodeGenHLSL/builtins/StructuredBuffer-elementtype.hlsl @@ -13,6 +13,8 @@ // CHECK: %"class.hlsl::StructuredBuffer.9" = type { target("dx.RawBuffer", <3 x i32>, 0, 0) } // CHECK: %"class.hlsl::StructuredBuffer.10" = type { target("dx.RawBuffer", <2 x half>, 0, 0) } // CHECK: %"class.hlsl::StructuredBuffer.11" = type { target("dx.RawBuffer", <3 x float>, 0, 0) } +// CHECK: %"class.hlsl::StructuredBuffer.12" = type { target("dx.RawBuffer", i32, 0, 0) } +// CHECK: %"class.hlsl::StructuredBuffer.13" = type { target("dx.RawBuffer", <4 x i32>, 0, 0) } StructuredBuffer BufI16; StructuredBuffer BufU16; @@ -27,6 +29,8 @@ StructuredBuffer< vector > BufI16x4; StructuredBuffer< vector > BufU32x3; StructuredBuffer BufF16x2; StructuredBuffer BufF32x3; +StructuredBuffer BufBool; +StructuredBuffer BufBoolVec; // TODO: StructuredBuffer BufSNormF16; // TODO: StructuredBuffer BufUNormF16; // TODO: StructuredBuffer BufSNormF32; @@ -49,4 +53,6 @@ void main(int GI : SV_GroupIndex) { vector v11 = BufU32x3[GI]; half2 v12 = BufF16x2[GI]; float3 v13 = BufF32x3[GI]; + bool v14 = BufBool[GI]; + bool4 v15 = BufBoolVec[GI]; }