diff options
author | Ashley Coleman <ascoleman@microsoft.com> | 2025-04-10 13:56:34 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-10 13:56:34 -0600 |
commit | 966667f5419d6cdd8d02fdf9ad2e39c0a2f94fe1 (patch) | |
tree | 1f18aa1db860168e5dbc424869d8a84f96d30081 /llvm/unittests/Analysis | |
parent | 9188288581f73a10bff9ee1500146dff7901e94c (diff) | |
download | llvm-966667f5419d6cdd8d02fdf9ad2e39c0a2f94fe1.zip llvm-966667f5419d6cdd8d02fdf9ad2e39c0a2f94fe1.tar.gz llvm-966667f5419d6cdd8d02fdf9ad2e39c0a2f94fe1.tar.bz2 |
[NFC][HLSL] Refactor DXILResourceTest for upcoming PR (#134952)
Local changes were getting pretty large and complex so this is an NFC
refactor PR to simplify the upcoming changes
Diffstat (limited to 'llvm/unittests/Analysis')
-rw-r--r-- | llvm/unittests/Analysis/DXILResourceTest.cpp | 604 |
1 files changed, 310 insertions, 294 deletions
diff --git a/llvm/unittests/Analysis/DXILResourceTest.cpp b/llvm/unittests/Analysis/DXILResourceTest.cpp index 6654906..6f25983 100644 --- a/llvm/unittests/Analysis/DXILResourceTest.cpp +++ b/llvm/unittests/Analysis/DXILResourceTest.cpp @@ -64,7 +64,12 @@ testing::AssertionResult MDTupleEq(const char *LHSExpr, const char *RHSExpr, << "Which is:\n" << " " << RHSRepr; } + #define EXPECT_MDEQ(X, Y) EXPECT_PRED_FORMAT2(MDTupleEq, X, Y) + +#define EXPECT_PROPS_EQ(X, Y, Z) \ + EXPECT_EQ(X, (std::pair<uint32_t, uint32_t>{Y, Z})) + } // namespace TEST(DXILResource, AnnotationsAndMetadata) { @@ -88,326 +93,337 @@ TEST(DXILResource, AnnotationsAndMetadata) { MDBuilder TestMD(Context, Int32Ty, Int1Ty); // ByteAddressBuffer Buffer; - ResourceTypeInfo RTI(llvm::TargetExtType::get( - Context, "dx.RawBuffer", Int8Ty, {/*IsWriteable=*/0, /*IsROV=*/0})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::SRV); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::RawBuffer); - - ResourceInfo RI( - /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, - RTI.getHandleTy()); - GlobalVariable *GV = RI.createSymbol(M, RTI.createElementStruct(), "Buffer"); - std::pair<uint32_t, uint32_t> Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x0000000bU); - EXPECT_EQ(Props.second, 0U); - MDTuple *MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(0, GV, "Buffer", 0, 0, 1, 11, 0, nullptr)); + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.RawBuffer", Int8Ty, {/*IsWriteable=*/0, /*IsROV=*/0})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::SRV); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::RawBuffer); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "Buffer"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x0000000bU, 0U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), + TestMD.get(0, GV, "Buffer", 0, 0, 1, 11, 0, nullptr)); + } // RWByteAddressBuffer BufferOut : register(u3, space2); - RTI = ResourceTypeInfo(llvm::TargetExtType::get( - Context, "dx.RawBuffer", Int8Ty, {/*IsWriteable=*/1, /*IsROV=*/0})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); - EXPECT_EQ(RTI.getUAV().GloballyCoherent, false); - EXPECT_EQ(RTI.getUAV().HasCounter, false); - EXPECT_EQ(RTI.getUAV().IsROV, false); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::RawBuffer); - - RI = ResourceInfo( - /*RecordID=*/1, /*Space=*/2, /*LowerBound=*/3, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "BufferOut"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x0000100bU); - EXPECT_EQ(Props.second, 0U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(1, GV, "BufferOut", 2, 3, 1, 11, false, false, - false, nullptr)); + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.RawBuffer", Int8Ty, {/*IsWriteable=*/1, /*IsROV=*/0})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); + EXPECT_EQ(RTI.getUAV().GloballyCoherent, false); + EXPECT_EQ(RTI.getUAV().HasCounter, false); + EXPECT_EQ(RTI.getUAV().IsROV, false); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::RawBuffer); + + ResourceInfo RI( + /*RecordID=*/1, /*Space=*/2, /*LowerBound=*/3, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "BufferOut"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x0000100bU, 0U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), + TestMD.get(1, GV, "BufferOut", 2, 3, 1, 11, false, false, false, + nullptr)); + } // struct BufType0 { int i; float f; double d; }; // StructuredBuffer<BufType0> Buffer0 : register(t0); - StructType *BufType0 = - StructType::create(Context, {Int32Ty, FloatTy, DoubleTy}, "BufType0"); - RTI = ResourceTypeInfo(llvm::TargetExtType::get( - Context, "dx.RawBuffer", BufType0, {/*IsWriteable=*/0, /*IsROV=*/0})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::SRV); - ASSERT_EQ(RTI.isStruct(), true); - EXPECT_EQ(RTI.getStruct(DL).Stride, 16u); - EXPECT_EQ(RTI.getStruct(DL).AlignLog2, Log2(Align(8))); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::StructuredBuffer); - - RI = ResourceInfo( - /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "Buffer0"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x0000030cU); - EXPECT_EQ(Props.second, 0x00000010U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, - TestMD.get(0, GV, "Buffer0", 0, 0, 1, 12, 0, TestMD.get(1, 16))); + { + StructType *BufType0 = + StructType::create(Context, {Int32Ty, FloatTy, DoubleTy}, "BufType0"); + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.RawBuffer", BufType0, {/*IsWriteable=*/0, /*IsROV=*/0})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::SRV); + ASSERT_EQ(RTI.isStruct(), true); + EXPECT_EQ(RTI.getStruct(DL).Stride, 16u); + EXPECT_EQ(RTI.getStruct(DL).AlignLog2, Log2(Align(8))); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::StructuredBuffer); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "Buffer0"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x0000030cU, 0x00000010U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), TestMD.get(0, GV, "Buffer0", 0, 0, 1, + 12, 0, TestMD.get(1, 16))); + } // StructuredBuffer<float3> Buffer1 : register(t1); - RTI = ResourceTypeInfo(llvm::TargetExtType::get( - Context, "dx.RawBuffer", Floatx3Ty, {/*IsWriteable=*/0, /*IsROV=*/0})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::SRV); - ASSERT_EQ(RTI.isStruct(), true); - EXPECT_EQ(RTI.getStruct(DL).Stride, 12u); - EXPECT_EQ(RTI.getStruct(DL).AlignLog2, 0u); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::StructuredBuffer); - - RI = ResourceInfo( - /*RecordID=*/1, /*Space=*/0, /*LowerBound=*/1, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "Buffer1"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x0000000cU); - EXPECT_EQ(Props.second, 0x0000000cU); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, - TestMD.get(1, GV, "Buffer1", 0, 1, 1, 12, 0, TestMD.get(1, 12))); + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.RawBuffer", Floatx3Ty, {/*IsWriteable=*/0, /*IsROV=*/0})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::SRV); + ASSERT_EQ(RTI.isStruct(), true); + EXPECT_EQ(RTI.getStruct(DL).Stride, 12u); + EXPECT_EQ(RTI.getStruct(DL).AlignLog2, 0u); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::StructuredBuffer); + + ResourceInfo RI( + /*RecordID=*/1, /*Space=*/0, /*LowerBound=*/1, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "Buffer1"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x0000000cU, 0x0000000cU); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), TestMD.get(1, GV, "Buffer1", 0, 1, 1, + 12, 0, TestMD.get(1, 12))); + } // Texture2D<float4> ColorMapTexture : register(t2); - RTI = ResourceTypeInfo( - llvm::TargetExtType::get(Context, "dx.Texture", Floatx4Ty, - {/*IsWriteable=*/0, /*IsROV=*/0, /*IsSigned=*/0, - llvm::to_underlying(ResourceKind::Texture2D)})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::SRV); - ASSERT_EQ(RTI.isTyped(), true); - EXPECT_EQ(RTI.getTyped().ElementTy, ElementType::F32); - EXPECT_EQ(RTI.getTyped().ElementCount, 4u); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Texture2D); - - RI = ResourceInfo( - /*RecordID=*/2, /*Space=*/0, /*LowerBound=*/2, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "ColorMapTexture"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x00000002U); - EXPECT_EQ(Props.second, 0x00000409U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(2, GV, "ColorMapTexture", 0, 2, 1, 2, 0, - TestMD.get(0, 9))); + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.Texture", Floatx4Ty, + {/*IsWriteable=*/0, /*IsROV=*/0, /*IsSigned=*/0, + llvm::to_underlying(ResourceKind::Texture2D)})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::SRV); + ASSERT_EQ(RTI.isTyped(), true); + EXPECT_EQ(RTI.getTyped().ElementTy, ElementType::F32); + EXPECT_EQ(RTI.getTyped().ElementCount, 4u); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Texture2D); + + ResourceInfo RI( + /*RecordID=*/2, /*Space=*/0, /*LowerBound=*/2, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "ColorMapTexture"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x00000002U, 0x00000409U); + EXPECT_MDEQ( + RI.getAsMetadata(M, RTI), + TestMD.get(2, GV, "ColorMapTexture", 0, 2, 1, 2, 0, TestMD.get(0, 9))); + } // Texture2DMS<float, 8> DepthBuffer : register(t0); - RTI = ResourceTypeInfo(llvm::TargetExtType::get( - Context, "dx.MSTexture", FloatTy, - {/*IsWriteable=*/0, /*SampleCount=*/8, - /*IsSigned=*/0, llvm::to_underlying(ResourceKind::Texture2DMS)})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::SRV); - ASSERT_EQ(RTI.isTyped(), true); - EXPECT_EQ(RTI.getTyped().ElementTy, ElementType::F32); - EXPECT_EQ(RTI.getTyped().ElementCount, 1u); - ASSERT_EQ(RTI.isMultiSample(), true); - EXPECT_EQ(RTI.getMultiSampleCount(), 8u); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Texture2DMS); - - RI = ResourceInfo( - /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "DepthBuffer"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x00000003U); - EXPECT_EQ(Props.second, 0x00080109U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ( - MD, TestMD.get(0, GV, "DepthBuffer", 0, 0, 1, 3, 8, TestMD.get(0, 9))); + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.MSTexture", FloatTy, + {/*IsWriteable=*/0, /*SampleCount=*/8, + /*IsSigned=*/0, llvm::to_underlying(ResourceKind::Texture2DMS)})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::SRV); + ASSERT_EQ(RTI.isTyped(), true); + EXPECT_EQ(RTI.getTyped().ElementTy, ElementType::F32); + EXPECT_EQ(RTI.getTyped().ElementCount, 1u); + ASSERT_EQ(RTI.isMultiSample(), true); + EXPECT_EQ(RTI.getMultiSampleCount(), 8u); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Texture2DMS); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "DepthBuffer"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x00000003U, 0x00080109U); + EXPECT_MDEQ( + RI.getAsMetadata(M, RTI), + TestMD.get(0, GV, "DepthBuffer", 0, 0, 1, 3, 8, TestMD.get(0, 9))); + } // FeedbackTexture2D<SAMPLER_FEEDBACK_MIN_MIP> feedbackMinMip; - RTI = ResourceTypeInfo(llvm::TargetExtType::get( - Context, "dx.FeedbackTexture", {}, - {llvm::to_underlying(SamplerFeedbackType::MinMip), - llvm::to_underlying(ResourceKind::FeedbackTexture2D)})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); - ASSERT_EQ(RTI.isFeedback(), true); - EXPECT_EQ(RTI.getFeedbackType(), SamplerFeedbackType::MinMip); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::FeedbackTexture2D); - - RI = ResourceInfo( - /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "feedbackMinMip"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x00001011U); - EXPECT_EQ(Props.second, 0U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(0, GV, "feedbackMinMip", 0, 0, 1, 17, false, false, - false, TestMD.get(2, 0))); + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.FeedbackTexture", {}, + {llvm::to_underlying(SamplerFeedbackType::MinMip), + llvm::to_underlying(ResourceKind::FeedbackTexture2D)})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); + ASSERT_EQ(RTI.isFeedback(), true); + EXPECT_EQ(RTI.getFeedbackType(), SamplerFeedbackType::MinMip); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::FeedbackTexture2D); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "feedbackMinMip"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x00001011U, 0U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), + TestMD.get(0, GV, "feedbackMinMip", 0, 0, 1, 17, false, false, + false, TestMD.get(2, 0))); + } // FeedbackTexture2DArray<SAMPLER_FEEDBACK_MIP_REGION_USED> feedbackMipRegion; - RTI = ResourceTypeInfo(llvm::TargetExtType::get( - Context, "dx.FeedbackTexture", {}, - {llvm::to_underlying(SamplerFeedbackType::MipRegionUsed), - llvm::to_underlying(ResourceKind::FeedbackTexture2DArray)})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); - ASSERT_EQ(RTI.isFeedback(), true); - EXPECT_EQ(RTI.getFeedbackType(), SamplerFeedbackType::MipRegionUsed); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::FeedbackTexture2DArray); - - RI = ResourceInfo( - /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "feedbackMipRegion"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x00001012U); - EXPECT_EQ(Props.second, 0x00000001U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(0, GV, "feedbackMipRegion", 0, 0, 1, 18, false, - false, false, TestMD.get(2, 1))); + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.FeedbackTexture", {}, + {llvm::to_underlying(SamplerFeedbackType::MipRegionUsed), + llvm::to_underlying(ResourceKind::FeedbackTexture2DArray)})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); + ASSERT_EQ(RTI.isFeedback(), true); + EXPECT_EQ(RTI.getFeedbackType(), SamplerFeedbackType::MipRegionUsed); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::FeedbackTexture2DArray); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "feedbackMipRegion"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x00001012U, 0x00000001U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), + TestMD.get(0, GV, "feedbackMipRegion", 0, 0, 1, 18, false, + false, false, TestMD.get(2, 1))); + } // globallycoherent RWTexture2D<int2> OutputTexture : register(u0, space2); - RTI = ResourceTypeInfo( - llvm::TargetExtType::get(Context, "dx.Texture", Int32x2Ty, - {/*IsWriteable=*/1, - /*IsROV=*/0, /*IsSigned=*/1, - llvm::to_underlying(ResourceKind::Texture2D)}), - /*GloballyCoherent=*/true, /*HasCounter=*/false); - - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); - EXPECT_EQ(RTI.getUAV().GloballyCoherent, true); - EXPECT_EQ(RTI.getUAV().HasCounter, false); - EXPECT_EQ(RTI.getUAV().IsROV, false); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Texture2D); - - RI = ResourceInfo( - /*RecordID=*/0, /*Space=*/2, /*LowerBound=*/0, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "OutputTexture"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x00005002U); - EXPECT_EQ(Props.second, 0x00000204U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(0, GV, "OutputTexture", 2, 0, 1, 2, true, false, - false, TestMD.get(0, 4))); + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.Texture", Int32x2Ty, + {/*IsWriteable=*/1, + /*IsROV=*/0, /*IsSigned=*/1, + llvm::to_underlying(ResourceKind::Texture2D)}), + /*GloballyCoherent=*/true, /*HasCounter=*/false); + + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); + EXPECT_EQ(RTI.getUAV().GloballyCoherent, true); + EXPECT_EQ(RTI.getUAV().HasCounter, false); + EXPECT_EQ(RTI.getUAV().IsROV, false); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Texture2D); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/2, /*LowerBound=*/0, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "OutputTexture"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x00005002U, 0x00000204U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), + TestMD.get(0, GV, "OutputTexture", 2, 0, 1, 2, true, false, + false, TestMD.get(0, 4))); + } // RasterizerOrderedBuffer<float4> ROB; - RTI = ResourceTypeInfo(llvm::TargetExtType::get( - Context, "dx.TypedBuffer", Floatx4Ty, - {/*IsWriteable=*/1, /*IsROV=*/1, /*IsSigned=*/0})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); - EXPECT_EQ(RTI.getUAV().GloballyCoherent, false); - EXPECT_EQ(RTI.getUAV().HasCounter, false); - EXPECT_EQ(RTI.getUAV().IsROV, true); - ASSERT_EQ(RTI.isTyped(), true); - EXPECT_EQ(RTI.getTyped().ElementTy, ElementType::F32); - EXPECT_EQ(RTI.getTyped().ElementCount, 4u); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::TypedBuffer); - - RI = ResourceInfo( - /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "ROB"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x0000300aU); - EXPECT_EQ(Props.second, 0x00000409U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(0, GV, "ROB", 0, 0, 1, 10, false, false, true, - TestMD.get(0, 9))); + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.TypedBuffer", Floatx4Ty, + {/*IsWriteable=*/1, /*IsROV=*/1, /*IsSigned=*/0})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); + EXPECT_EQ(RTI.getUAV().GloballyCoherent, false); + EXPECT_EQ(RTI.getUAV().HasCounter, false); + EXPECT_EQ(RTI.getUAV().IsROV, true); + ASSERT_EQ(RTI.isTyped(), true); + EXPECT_EQ(RTI.getTyped().ElementTy, ElementType::F32); + EXPECT_EQ(RTI.getTyped().ElementCount, 4u); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::TypedBuffer); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = RI.createSymbol(M, RTI.createElementStruct(), "ROB"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x0000300aU, 0x00000409U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), + TestMD.get(0, GV, "ROB", 0, 0, 1, 10, false, false, true, + TestMD.get(0, 9))); + } // RWStructuredBuffer<ParticleMotion> g_OutputBuffer : register(u2); - StructType *BufType1 = StructType::create( - Context, {Floatx3Ty, FloatTy, Int32Ty}, "ParticleMotion"); - RTI = ResourceTypeInfo( - llvm::TargetExtType::get(Context, "dx.RawBuffer", BufType1, - {/*IsWriteable=*/1, /*IsROV=*/0}), - /*GloballyCoherent=*/false, /*HasCounter=*/true); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); - EXPECT_EQ(RTI.getUAV().GloballyCoherent, false); - EXPECT_EQ(RTI.getUAV().HasCounter, true); - EXPECT_EQ(RTI.getUAV().IsROV, false); - ASSERT_EQ(RTI.isStruct(), true); - EXPECT_EQ(RTI.getStruct(DL).Stride, 20u); - EXPECT_EQ(RTI.getStruct(DL).AlignLog2, Log2(Align(4))); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::StructuredBuffer); - - RI = ResourceInfo( - /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/2, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "g_OutputBuffer"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x0000920cU); - EXPECT_EQ(Props.second, 0x00000014U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(0, GV, "g_OutputBuffer", 0, 2, 1, 12, false, true, - false, TestMD.get(1, 20))); + { + StructType *BufType1 = StructType::create( + Context, {Floatx3Ty, FloatTy, Int32Ty}, "ParticleMotion"); + ResourceTypeInfo RTI( + llvm::TargetExtType::get(Context, "dx.RawBuffer", BufType1, + {/*IsWriteable=*/1, /*IsROV=*/0}), + /*GloballyCoherent=*/false, /*HasCounter=*/true); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); + EXPECT_EQ(RTI.getUAV().GloballyCoherent, false); + EXPECT_EQ(RTI.getUAV().HasCounter, true); + EXPECT_EQ(RTI.getUAV().IsROV, false); + ASSERT_EQ(RTI.isStruct(), true); + EXPECT_EQ(RTI.getStruct(DL).Stride, 20u); + EXPECT_EQ(RTI.getStruct(DL).AlignLog2, Log2(Align(4))); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::StructuredBuffer); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/2, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "g_OutputBuffer"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x0000920cU, 0x00000014U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), + TestMD.get(0, GV, "g_OutputBuffer", 0, 2, 1, 12, false, true, + false, TestMD.get(1, 20))); + } // RWTexture2DMSArray<uint, 8> g_rw_t2dmsa; - RTI = ResourceTypeInfo(llvm::TargetExtType::get( - Context, "dx.MSTexture", Int32Ty, - {/*IsWriteable=*/1, /*SampleCount=*/8, /*IsSigned=*/0, - llvm::to_underlying(ResourceKind::Texture2DMSArray)})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); - EXPECT_EQ(RTI.getUAV().GloballyCoherent, false); - EXPECT_EQ(RTI.getUAV().HasCounter, false); - EXPECT_EQ(RTI.getUAV().IsROV, false); - ASSERT_EQ(RTI.isTyped(), true); - EXPECT_EQ(RTI.getTyped().ElementTy, ElementType::U32); - EXPECT_EQ(RTI.getTyped().ElementCount, 1u); - ASSERT_EQ(RTI.isMultiSample(), true); - EXPECT_EQ(RTI.getMultiSampleCount(), 8u); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Texture2DMSArray); - - RI = ResourceInfo( - /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "g_rw_t2dmsa"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x00001008U); - EXPECT_EQ(Props.second, 0x00080105U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(0, GV, "g_rw_t2dmsa", 0, 0, 1, 8, false, false, - false, TestMD.get(0, 5))); + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.MSTexture", Int32Ty, + {/*IsWriteable=*/1, /*SampleCount=*/8, /*IsSigned=*/0, + llvm::to_underlying(ResourceKind::Texture2DMSArray)})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::UAV); + EXPECT_EQ(RTI.getUAV().GloballyCoherent, false); + EXPECT_EQ(RTI.getUAV().HasCounter, false); + EXPECT_EQ(RTI.getUAV().IsROV, false); + ASSERT_EQ(RTI.isTyped(), true); + EXPECT_EQ(RTI.getTyped().ElementTy, ElementType::U32); + EXPECT_EQ(RTI.getTyped().ElementCount, 1u); + ASSERT_EQ(RTI.isMultiSample(), true); + EXPECT_EQ(RTI.getMultiSampleCount(), 8u); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Texture2DMSArray); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "g_rw_t2dmsa"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x00001008U, 0x00080105U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), + TestMD.get(0, GV, "g_rw_t2dmsa", 0, 0, 1, 8, false, false, + false, TestMD.get(0, 5))); + } // cbuffer cb0 { float4 g_X; float4 g_Y; } - StructType *CBufType0 = - StructType::create(Context, {Floatx4Ty, Floatx4Ty}, "cb0"); - RTI = ResourceTypeInfo(llvm::TargetExtType::get(Context, "dx.CBuffer", + { + StructType *CBufType0 = + StructType::create(Context, {Floatx4Ty, Floatx4Ty}, "cb0"); + ResourceTypeInfo RTI(llvm::TargetExtType::get(Context, "dx.CBuffer", CBufType0, {/*Size=*/32})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::CBuffer); - EXPECT_EQ(RTI.getCBufferSize(DL), 32u); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::CBuffer); - - RI = ResourceInfo( - /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), ""); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x0000000dU); - EXPECT_EQ(Props.second, 0x00000020U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(0, GV, "", 0, 0, 1, 32, nullptr)); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::CBuffer); + EXPECT_EQ(RTI.getCBufferSize(DL), 32u); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::CBuffer); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = RI.createSymbol(M, RTI.createElementStruct(), ""); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x0000000dU, 0x00000020U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), + TestMD.get(0, GV, "", 0, 0, 1, 32, nullptr)); + } // SamplerState ColorMapSampler : register(s0); - RTI = ResourceTypeInfo(llvm::TargetExtType::get( - Context, "dx.Sampler", {}, - {llvm::to_underlying(dxil::SamplerType::Default)})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::Sampler); - EXPECT_EQ(RTI.getSamplerType(), dxil::SamplerType::Default); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Sampler); - - RI = ResourceInfo( - /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "ColorMapSampler"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x0000000eU); - EXPECT_EQ(Props.second, 0U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(0, GV, "ColorMapSampler", 0, 0, 1, 0, nullptr)); - - RTI = ResourceTypeInfo(llvm::TargetExtType::get( - Context, "dx.Sampler", {}, - {llvm::to_underlying(dxil::SamplerType::Comparison)})); - EXPECT_EQ(RTI.getResourceClass(), ResourceClass::Sampler); - EXPECT_EQ(RTI.getSamplerType(), dxil::SamplerType::Comparison); - EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Sampler); - - RI = ResourceInfo( - /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, - RTI.getHandleTy()); - GV = RI.createSymbol(M, RTI.createElementStruct(), "CmpSampler"); - Props = RI.getAnnotateProps(M, RTI); - EXPECT_EQ(Props.first, 0x0000800eU); - EXPECT_EQ(Props.second, 0U); - MD = RI.getAsMetadata(M, RTI); - EXPECT_MDEQ(MD, TestMD.get(0, GV, "CmpSampler", 0, 0, 1, 1, nullptr)); + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.Sampler", {}, + {llvm::to_underlying(dxil::SamplerType::Default)})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::Sampler); + EXPECT_EQ(RTI.getSamplerType(), dxil::SamplerType::Default); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Sampler); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "ColorMapSampler"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x0000000eU, 0U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), + TestMD.get(0, GV, "ColorMapSampler", 0, 0, 1, 0, nullptr)); + } + + { + ResourceTypeInfo RTI(llvm::TargetExtType::get( + Context, "dx.Sampler", {}, + {llvm::to_underlying(dxil::SamplerType::Comparison)})); + EXPECT_EQ(RTI.getResourceClass(), ResourceClass::Sampler); + EXPECT_EQ(RTI.getSamplerType(), dxil::SamplerType::Comparison); + EXPECT_EQ(RTI.getResourceKind(), ResourceKind::Sampler); + + ResourceInfo RI( + /*RecordID=*/0, /*Space=*/0, /*LowerBound=*/0, /*Size=*/1, + RTI.getHandleTy()); + GlobalVariable *GV = + RI.createSymbol(M, RTI.createElementStruct(), "CmpSampler"); + EXPECT_PROPS_EQ(RI.getAnnotateProps(M, RTI), 0x0000800eU, 0U); + EXPECT_MDEQ(RI.getAsMetadata(M, RTI), + TestMD.get(0, GV, "CmpSampler", 0, 0, 1, 1, nullptr)); + } } |