Skip to content

Commit ccb2786

Browse files
committed
Handle writeable types.
1 parent e1f4778 commit ccb2786

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

clang/lib/CodeGen/Targets/SPIR.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -401,8 +401,6 @@ llvm::Type *CommonSPIRTargetCodeGenInfo::getHLSLType(
401401
uint32_t StorageClass = /* StorageBuffer storage class */ 12;
402402
bool IsWritable =
403403
ResAttrs.ResourceClass == llvm::dxil::ResourceClass::UAV;
404-
assert(!IsWritable && "Writable buffers require a corresponding counter "
405-
"variable. Not implemented yet.");
406404
return llvm::TargetExtType::get(Ctx, "spirv.VulkanBuffer",
407405
{RuntimeArrayType},
408406
{StorageClass, IsWritable});

clang/test/CodeGenHLSL/builtins/StructuredBuffers-constructors.hlsl

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33

44

55
StructuredBuffer<float> Buf : register(t10);
6+
RWStructuredBuffer<float> Buf2 : register(u5, space1);
67

78
#ifndef SPIRV
8-
// NOTE: SPIRV codegen for resource types with counter variable is not yet implemented
9-
RWStructuredBuffer<float> Buf2 : register(u5, space1);
9+
// NOTE: SPIRV codegen for these resource types is not implemented yet.
1010
AppendStructuredBuffer<float> Buf3 : register(u3);
1111
ConsumeStructuredBuffer<float> Buf4 : register(u4);
1212
RasterizerOrderedStructuredBuffer<float> Buf5 : register(u1, space2);
@@ -19,10 +19,11 @@ RasterizerOrderedStructuredBuffer<float> Buf5 : register(u1, space2);
1919
// CHECK-DXIL: %"class.hlsl::RasterizerOrderedStructuredBuffer" = type { target("dx.RawBuffer", float, 1, 1) }
2020

2121
// CHECK-SPIRV: %"class.hlsl::StructuredBuffer" = type { target("spirv.VulkanBuffer", [0 x float], 12, 0) }
22+
// CHECK-SPIRV: %"class.hlsl::RWStructuredBuffer" = type { target("spirv.VulkanBuffer", [0 x float], 12, 1) }
2223

2324

2425
// CHECK: @_ZL3Buf = internal global %"class.hlsl::StructuredBuffer" poison
25-
// CHECK-DXIL: @_ZL4Buf2 = internal global %"class.hlsl::RWStructuredBuffer" poison, align 4
26+
// CHECK: @_ZL4Buf2 = internal global %"class.hlsl::RWStructuredBuffer" poison
2627
// CHECK-DXIL: @_ZL4Buf3 = internal global %"class.hlsl::AppendStructuredBuffer" poison, align 4
2728
// CHECK-DXIL: @_ZL4Buf4 = internal global %"class.hlsl::ConsumeStructuredBuffer" poison, align 4
2829
// CHECK-DXIL: @_ZL4Buf5 = internal global %"class.hlsl::RasterizerOrderedStructuredBuffer" poison, align 4
@@ -33,9 +34,11 @@ RasterizerOrderedStructuredBuffer<float> Buf5 : register(u1, space2);
3334
// CHECK-SPIRV: [[H:%.*]] = call target("spirv.VulkanBuffer", [0 x float], 12, 0) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0f32_12_0t(i32 0, i32 10, i32 1, i32 0, i1 false)
3435
// CHECK-SPIRV: store target("spirv.VulkanBuffer", [0 x float], 12, 0) [[H]], ptr @_ZL3Buf, align 8
3536

36-
// CHECK-DXIL: define internal void @_init_resource__ZL4Buf2()
37+
// CHECK: define internal void @_init_resource__ZL4Buf2()
3738
// CHECK-DXIL: [[H:%.*]] = call target("dx.RawBuffer", float, 1, 0) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_f32_1_0t(i32 1, i32 5, i32 1, i32 0, i1 false)
3839
// CHECK-DXIL: store target("dx.RawBuffer", float, 1, 0) [[H]], ptr @_ZL4Buf2, align 4
40+
// CHECK-SPIRV: [[H:%.*]] = call target("spirv.VulkanBuffer", [0 x float], 12, 1) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0f32_12_1t(i32 1, i32 5, i32 1, i32 0, i1 false)
41+
// CHECK-SPIRV: store target("spirv.VulkanBuffer", [0 x float], 12, 1) [[H]], ptr @_ZL4Buf2, align 8
3942

4043
// CHECK-DXIL: define internal void @_init_resource__ZL4Buf3()
4144
// CHECK-DXIL: [[H:%.*]] = call target("dx.RawBuffer", float, 1, 0) @llvm.dx.resource.handlefrombinding.tdx.RawBuffer_f32_1_0t(i32 0, i32 3, i32 1, i32 0, i1 false)
@@ -61,7 +64,7 @@ RasterizerOrderedStructuredBuffer<float> Buf5 : register(u1, space2);
6164

6265
// CHECK: define {{.*}} void @_GLOBAL__sub_I_StructuredBuffers_constructors.hlsl()
6366
// CHECK: call {{.*}} @_init_resource__ZL3Buf()
64-
// CHECK-DXIL: call void @_init_resource__ZL4Buf2()
67+
// CHECK: call {{.*}} @_init_resource__ZL4Buf2()
6568
// CHECK-DXIL: call void @_init_resource__ZL4Buf3()
6669
// CHECK-DXIL: call void @_init_resource__ZL4Buf4()
6770
// CHECK-DXIL: call void @_init_resource__ZL4Buf5()

0 commit comments

Comments
 (0)