Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion llvm/include/llvm/Analysis/DXILResource.h
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ class ResourceTypeInfo {

struct TypedInfo {
dxil::ElementType ElementTy;
dxil::ElementType DXILTargetTy;
dxil::ElementType DXILStorageTy;
uint32_t ElementCount;

bool operator==(const TypedInfo &RHS) const {
Expand Down
16 changes: 10 additions & 6 deletions llvm/lib/Analysis/DXILResource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,9 +206,11 @@ static dxil::ElementType toDXILElementType(Type *Ty, bool IsSigned) {
return ElementType::Invalid;
}

static dxil::ElementType toDXILTargetType(dxil::ElementType ET) {
// TODO: Handle unorm, snorm, and packed.
if (ET == dxil::ElementType::U64 || ET == dxil::ElementType::F64)
static dxil::ElementType toDXILStorageType(dxil::ElementType ET) {
// TODO: Handle unorm and snorm.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No longer necessary - we're handling unorm and snorm right below!

if (ET == dxil::ElementType::U64 || ET == dxil::ElementType::F64 ||
ET == dxil::ElementType::I64 || ET == dxil::ElementType::SNormF64 ||
ET == dxil::ElementType::UNormF64)
return dxil::ElementType::U32;
return ET;
}
Expand Down Expand Up @@ -576,11 +578,11 @@ ResourceTypeInfo::TypedInfo ResourceTypeInfo::getTyped() const {

auto [ElTy, IsSigned] = getTypedElementType(Kind, HandleTy);
dxil::ElementType ET = toDXILElementType(ElTy, IsSigned);
dxil::ElementType DXILTargetTy = toDXILTargetType(ET);
dxil::ElementType DXILStorageTy = toDXILStorageType(ET);
uint32_t Count = 1;
if (auto *VTy = dyn_cast<FixedVectorType>(ElTy))
Count = VTy->getNumElements();
return {ET, DXILTargetTy, Count};
return {ET, DXILStorageTy, Count};
}

dxil::SamplerFeedbackType ResourceTypeInfo::getFeedbackType() const {
Expand Down Expand Up @@ -645,6 +647,8 @@ void ResourceTypeInfo::print(raw_ostream &OS, const DataLayout &DL) const {
} else if (isTyped()) {
TypedInfo Typed = getTyped();
OS << " Element Type: " << getElementTypeName(Typed.ElementTy) << "\n"
<< " Storage Type: " << getElementTypeName(Typed.DXILStorageTy)
<< "\n"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it'd be nicer for readability if we only include this when it's different, ie:

      OS << "  Element Type: " << getElementTypeName(Typed.ElementTy);
      if (Typed.ElementTy != Typed.DXILStorageTy)
        OS << " (stored as " << getElementTypeName(Typed.DXILStorageTy) << ")";
      OS << "\n";

Either way, please add a case to llvm/test/Analysis/DXILResource/buffer-frombinding.ll that exercises this code.

<< " Element Count: " << Typed.ElementCount << "\n";
} else if (isFeedback())
OS << " Feedback Type: " << getSamplerFeedbackTypeName(getFeedbackType())
Expand Down Expand Up @@ -723,7 +727,7 @@ MDTuple *ResourceInfo::getAsMetadata(Module &M,
} else if (RTI.isTyped()) {
Tags.push_back(getIntMD(llvm::to_underlying(ExtPropTags::ElementType)));
Tags.push_back(
getIntMD(llvm::to_underlying(RTI.getTyped().DXILTargetTy)));
getIntMD(llvm::to_underlying(RTI.getTyped().DXILStorageTy)));
} else if (RTI.isFeedback()) {
Tags.push_back(
getIntMD(llvm::to_underlying(ExtPropTags::SamplerFeedbackKind)));
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/DirectX/DXILPrettyPrinter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ static StringRef getRCPrefix(dxil::ResourceClass RC) {

static StringRef getFormatName(const dxil::ResourceTypeInfo &RI) {
if (RI.isTyped()) {
switch (RI.getTyped().DXILTargetTy) {
switch (RI.getTyped().DXILStorageTy) {
case dxil::ElementType::I1:
return "i1";
case dxil::ElementType::I16:
Expand Down