Skip to content

Commit 8c8a560

Browse files
committed
Address Comments
1 parent a7998f3 commit 8c8a560

File tree

5 files changed

+52
-23
lines changed

5 files changed

+52
-23
lines changed

llvm/include/llvm/Analysis/DXILResource.h

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,13 @@ class ResourceTypeInfo {
306306

307307
//===----------------------------------------------------------------------===//
308308

309+
enum class ResourceCounterDirection {
310+
Increment,
311+
Decrement,
312+
Unknown,
313+
Invalid,
314+
};
315+
309316
class ResourceInfo {
310317
public:
311318
struct ResourceBinding {
@@ -333,20 +340,22 @@ class ResourceInfo {
333340
GlobalVariable *Symbol = nullptr;
334341

335342
public:
336-
bool GloballyCoherent;
337-
bool HasCounter;
343+
bool GloballyCoherent = false;
344+
ResourceCounterDirection CounterDirection = ResourceCounterDirection::Unknown;
338345

339346
ResourceInfo(uint32_t RecordID, uint32_t Space, uint32_t LowerBound,
340347
uint32_t Size, TargetExtType *HandleTy,
341-
GlobalVariable *Symbol = nullptr, bool GloballyCoherent = false,
342-
bool HasCounter = false)
348+
GlobalVariable *Symbol = nullptr)
343349
: Binding{RecordID, Space, LowerBound, Size}, HandleTy(HandleTy),
344-
Symbol(Symbol), GloballyCoherent(GloballyCoherent),
345-
HasCounter(HasCounter) {}
350+
Symbol(Symbol) {}
346351

347352
void setBindingID(unsigned ID) { Binding.RecordID = ID; }
348353
void setGloballyCoherent(bool V) { GloballyCoherent = V; }
349-
void setHasCounter(bool V) { HasCounter = V; }
354+
void setCounterDirection(ResourceCounterDirection V) { CounterDirection = V; }
355+
356+
bool hasCounter() const {
357+
return CounterDirection != ResourceCounterDirection::Unknown;
358+
}
350359

351360
const ResourceBinding &getBinding() const { return Binding; }
352361
TargetExtType *getHandleTy() const { return HandleTy; }

llvm/lib/Analysis/DXILResource.cpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ MDTuple *ResourceInfo::getAsMetadata(Module &M,
573573
if (RTI.isUAV()) {
574574
ResourceTypeInfo::UAVInfo UAVFlags = RTI.getUAV();
575575
MDVals.push_back(getBoolMD(GloballyCoherent));
576-
MDVals.push_back(getBoolMD(HasCounter));
576+
MDVals.push_back(getBoolMD(hasCounter()));
577577
MDVals.push_back(getBoolMD(UAVFlags.IsROV));
578578
} else {
579579
// All SRVs include sample count in the metadata, but it's only meaningful
@@ -617,7 +617,7 @@ ResourceInfo::getAnnotateProps(Module &M, dxil::ResourceTypeInfo &RTI) const {
617617
bool IsGloballyCoherent = IsUAV && GloballyCoherent;
618618
uint8_t SamplerCmpOrHasCounter = 0;
619619
if (IsUAV)
620-
SamplerCmpOrHasCounter = HasCounter;
620+
SamplerCmpOrHasCounter = hasCounter();
621621
else if (RTI.isSampler())
622622
SamplerCmpOrHasCounter = RTI.getSamplerType() == SamplerType::Comparison;
623623

@@ -667,7 +667,22 @@ void ResourceInfo::print(raw_ostream &OS, dxil::ResourceTypeInfo &RTI,
667667
<< " Size: " << Binding.Size << "\n";
668668

669669
OS << " Globally Coherent: " << GloballyCoherent << "\n";
670-
OS << " HasCounter: " << HasCounter << "\n";
670+
OS << " Counter Direction: ";
671+
672+
switch (CounterDirection) {
673+
case ResourceCounterDirection::Increment:
674+
OS << "Increment\n";
675+
break;
676+
case ResourceCounterDirection::Decrement:
677+
OS << "Decrement\n";
678+
break;
679+
case ResourceCounterDirection::Unknown:
680+
OS << "Unknown\n";
681+
break;
682+
case ResourceCounterDirection::Invalid:
683+
OS << "Invalid\n";
684+
break;
685+
}
671686

672687
RTI.print(OS, DL);
673688
}

llvm/lib/Target/DirectX/DXContainerGlobals.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ void DXContainerGlobals::addResourcesForPSV(Module &M, PSVRuntimeInfo &PSV) {
229229

230230
dxil::ResourceTypeInfo &TypeInfo = DRTM[RI.getHandleTy()];
231231
dxbc::PSV::ResourceType ResType;
232-
if (RI.HasCounter)
232+
if (RI.hasCounter())
233233
ResType = dxbc::PSV::ResourceType::UAVStructuredWithCounter;
234234
else if (TypeInfo.isStruct())
235235
ResType = dxbc::PSV::ResourceType::UAVStructured;

llvm/test/Analysis/DXILResource/buffer-frombinding.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ define void @test_typedbuffer() {
5858
; CHECK: Lower Bound: 7
5959
; CHECK: Size: 1
6060
; CHECK: Globally Coherent: 0
61-
; CHECK: HasCounter: 0
61+
; CHECK: Counter Direction: Unknown
6262
; CHECK: Class: UAV
6363
; CHECK: Kind: TypedBuffer
6464
; CHECK: IsROV: 0
@@ -76,7 +76,7 @@ define void @test_typedbuffer() {
7676
; CHECK: Lower Bound: 5
7777
; CHECK: Size: 1
7878
; CHECK: Globally Coherent: 0
79-
; CHECK: HasCounter: 0
79+
; CHECK: Counter Direction: Unknown
8080
; CHECK: Class: UAV
8181
; CHECK: Kind: TypedBuffer
8282
; CHECK: IsROV: 0
@@ -99,7 +99,7 @@ define void @test_typedbuffer() {
9999
; CHECK: Lower Bound: 0
100100
; CHECK: Size: 10
101101
; CHECK: Globally Coherent: 0
102-
; CHECK: HasCounter: 0
102+
; CHECK: Counter Direction: Unknown
103103
; CHECK: Class: UAV
104104
; CHECK: Kind: TypedBuffer
105105
; CHECK: IsROV: 0

llvm/unittests/Analysis/DXILResourceTest.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ TEST(DXILResource, AnnotationsAndMetadata) {
127127
TestMD.get(1, GV, "BufferOut", 2, 3, 1, 11, false, false, false,
128128
nullptr));
129129
EXPECT_EQ(RI.GloballyCoherent, false);
130-
EXPECT_EQ(RI.HasCounter, false);
130+
EXPECT_EQ(RI.hasCounter(), false);
131+
EXPECT_EQ(RI.CounterDirection, ResourceCounterDirection::Unknown);
131132
}
132133

133134
// struct BufType0 { int i; float f; double d; };
@@ -279,8 +280,8 @@ TEST(DXILResource, AnnotationsAndMetadata) {
279280

280281
ResourceInfo RI(
281282
/*RecordID=*/0, /*Space=*/2, /*LowerBound=*/0, /*Size=*/1,
282-
RTI.getHandleTy(),
283-
/*Symbol=*/nullptr, /*GloballyCoherent=*/true, /*HasCounter=*/false);
283+
RTI.getHandleTy());
284+
RI.setGloballyCoherent(true);
284285
GlobalVariable *GV =
285286
RI.createSymbol(M, RTI.createElementStruct(), "OutputTexture");
286287
EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x00005002U, 0x00000204U);
@@ -289,7 +290,8 @@ TEST(DXILResource, AnnotationsAndMetadata) {
289290
false, TestMD.get(0, 4)));
290291

291292
EXPECT_EQ(RI.GloballyCoherent, true);
292-
EXPECT_EQ(RI.HasCounter, false);
293+
EXPECT_EQ(RI.hasCounter(), false);
294+
EXPECT_EQ(RI.CounterDirection, ResourceCounterDirection::Unknown);
293295
}
294296

295297
// RasterizerOrderedBuffer<float4> ROB;
@@ -313,7 +315,8 @@ TEST(DXILResource, AnnotationsAndMetadata) {
313315
TestMD.get(0, GV, "ROB", 0, 0, 1, 10, false, false, true,
314316
TestMD.get(0, 9)));
315317
EXPECT_EQ(RI.GloballyCoherent, false);
316-
EXPECT_EQ(RI.HasCounter, false);
318+
EXPECT_EQ(RI.hasCounter(), false);
319+
EXPECT_EQ(RI.CounterDirection, ResourceCounterDirection::Unknown);
317320
}
318321

319322
// RWStructuredBuffer<ParticleMotion> g_OutputBuffer : register(u2);
@@ -331,16 +334,17 @@ TEST(DXILResource, AnnotationsAndMetadata) {
331334

332335
ResourceInfo RI(
333336
/*RecordID=*/0, /*Space=*/0, /*LowerBound=*/2, /*Size=*/1,
334-
RTI.getHandleTy(),
335-
/*Symbol=*/nullptr, /*GloballyCoherent=*/false, /*HasCounter=*/true);
337+
RTI.getHandleTy());
338+
RI.setCounterDirection(ResourceCounterDirection::Increment);
336339
GlobalVariable *GV =
337340
RI.createSymbol(M, RTI.createElementStruct(), "g_OutputBuffer");
338341
EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x0000920cU, 0x00000014U);
339342
EXPECT_MDEQ(RI.getAsMetadata(M, RTI),
340343
TestMD.get(0, GV, "g_OutputBuffer", 0, 2, 1, 12, false, true,
341344
false, TestMD.get(1, 20)));
342345
EXPECT_EQ(RI.GloballyCoherent, false);
343-
EXPECT_EQ(RI.HasCounter, true);
346+
EXPECT_EQ(RI.hasCounter(), true);
347+
EXPECT_EQ(RI.CounterDirection, ResourceCounterDirection::Increment);
344348
}
345349

346350
// RWTexture2DMSArray<uint, 8> g_rw_t2dmsa;
@@ -368,7 +372,8 @@ TEST(DXILResource, AnnotationsAndMetadata) {
368372
TestMD.get(0, GV, "g_rw_t2dmsa", 0, 0, 1, 8, false, false,
369373
false, TestMD.get(0, 5)));
370374
EXPECT_EQ(RI.GloballyCoherent, false);
371-
EXPECT_EQ(RI.HasCounter, false);
375+
EXPECT_EQ(RI.hasCounter(), false);
376+
EXPECT_EQ(RI.CounterDirection, ResourceCounterDirection::Unknown);
372377
}
373378

374379
// cbuffer cb0 { float4 g_X; float4 g_Y; }

0 commit comments

Comments
 (0)