summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-util.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-01-19 18:02:40 -0800
committerGitHub <noreply@github.com>2024-01-19 18:02:40 -0800
commitfdc17a974970559d8ff76d52c3ce40aaa056d441 (patch)
treea7b2264776982707b36f901ac50acd4e047fd2bd /source/slang/slang-ir-util.cpp
parent84b214389cacde9f3c94d61b3d4ca6a927cecd04 (diff)
Add `-fspv-reflect` support. (#3464)
* Add `-fspv-reflect` support. Closes #3462. * Fix. * Fix. * Remove use of `SPV_GOOGLE_hlsl_functionality1`. * Fix spirv validation error. * Fix test. * Update typename hints. * Update commandline options doc. * Remove superfluous empty lines. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-ir-util.cpp')
-rw-r--r--source/slang/slang-ir-util.cpp190
1 files changed, 189 insertions, 1 deletions
diff --git a/source/slang/slang-ir-util.cpp b/source/slang/slang-ir-util.cpp
index 6afb6b719..b4a7b6b99 100644
--- a/source/slang/slang-ir-util.cpp
+++ b/source/slang/slang-ir-util.cpp
@@ -328,8 +328,196 @@ void getTypeNameHint(StringBuilder& sb, IRInst* type)
sb << "string";
break;
case kIROp_ArrayType:
- sb << "array_";
+ sb << "array<";
getTypeNameHint(sb, type->getOperand(0));
+ sb << ",";
+ getTypeNameHint(sb, as<IRArrayType>(type)->getElementCount());
+ sb << ">";
+ break;
+ case kIROp_UnsizedArrayType:
+ sb << "runtime_array<";
+ getTypeNameHint(sb, type->getOperand(0));
+ sb << ">";
+ break;
+ case kIROp_TextureType:
+ case kIROp_GLSLImageType:
+ {
+ auto textureType = as<IRResourceTypeBase>(type);
+ switch (textureType->getAccess())
+ {
+ case SLANG_RESOURCE_ACCESS_APPEND:
+ sb << "Append";
+ break;
+ case SLANG_RESOURCE_ACCESS_CONSUME:
+ sb << "Consume";
+ break;
+ case SLANG_RESOURCE_ACCESS_RASTER_ORDERED:
+ sb << "RasterizerOrdered";
+ break;
+ case SLANG_RESOURCE_ACCESS_WRITE:
+ sb << "RW";
+ break;
+ case SLANG_RESOURCE_ACCESS_FEEDBACK:
+ sb << "Feedback";
+ break;
+ case SLANG_RESOURCE_ACCESS_READ:
+ break;
+ }
+ if (textureType->isCombined())
+ {
+ switch (textureType->GetBaseShape())
+ {
+ case SLANG_TEXTURE_1D:
+ sb << "Sampler1D";
+ break;
+ case SLANG_TEXTURE_2D:
+ sb << "Sampler2D";
+ break;
+ case SLANG_TEXTURE_3D:
+ sb << "Sampler3D";
+ break;
+ case SLANG_TEXTURE_CUBE:
+ sb << "SamplerCube";
+ break;
+ case SLANG_TEXTURE_BUFFER:
+ sb << "SamplerBuffer";
+ break;
+ }
+ }
+ else
+ {
+ switch (textureType->GetBaseShape())
+ {
+ case SLANG_TEXTURE_1D:
+ sb << "Texture1D";
+ break;
+ case SLANG_TEXTURE_2D:
+ sb << "Texture2D";
+ break;
+ case SLANG_TEXTURE_3D:
+ sb << "Texture3D";
+ break;
+ case SLANG_TEXTURE_CUBE:
+ sb << "TextureCube";
+ break;
+ case SLANG_TEXTURE_BUFFER:
+ sb << "Buffer";
+ break;
+ }
+ }
+ if (textureType->isMultisample())
+ {
+ sb << "MS";
+ }
+ if (textureType->isArray())
+ {
+ sb << "Array";
+ }
+ if (textureType->isShadow())
+ {
+ sb << "Shadow";
+ }
+ }
+ break;
+ case kIROp_ParameterBlockType:
+ sb << "ParameterBlock<";
+ getTypeNameHint(sb, as<IRParameterBlockType>(type)->getElementType());
+ sb << ">";
+ break;
+ case kIROp_ConstantBufferType:
+ sb << "cbuffer<";
+ getTypeNameHint(sb, as<IRConstantBufferType>(type)->getElementType());
+ sb << ">";
+ break;
+ case kIROp_TextureBufferType:
+ sb << "tbuffer<";
+ getTypeNameHint(sb, as<IRTextureBufferType>(type)->getElementType());
+ sb << ">";
+ break;
+ case kIROp_GLSLShaderStorageBufferType:
+ sb << "StorageBuffer<";
+ getTypeNameHint(sb, as<IRGLSLShaderStorageBufferType>(type)->getElementType());
+ sb << ">";
+ break;
+ case kIROp_HLSLByteAddressBufferType:
+ sb << "ByteAddressBuffer";
+ break;
+ case kIROp_HLSLRWByteAddressBufferType:
+ sb << "RWByteAddressBuffer";
+ break;
+ case kIROp_HLSLRasterizerOrderedByteAddressBufferType:
+ sb << "RasterizerOrderedByteAddressBuffer";
+ break;
+ case kIROp_RaytracingAccelerationStructureType:
+ sb << "RayTracingAccelerationStructure";
+ break;
+ case kIROp_HitObjectType:
+ sb << "HitObject";
+ break;
+ case kIROp_HLSLConstBufferPointerType:
+ sb << "ConstantBufferPointer<";
+ getTypeNameHint(sb, as<IRHLSLConstBufferPointerType>(type)->getValueType());
+ sb << ">";
+ break;
+ case kIROp_HLSLStructuredBufferType:
+ sb << "StructuredBuffer<";
+ getTypeNameHint(sb, as<IRHLSLStructuredBufferTypeBase>(type)->getElementType());
+ sb << ">";
+ break;
+ case kIROp_HLSLRWStructuredBufferType:
+ sb << "RWStructuredBuffer<";
+ getTypeNameHint(sb, as<IRHLSLStructuredBufferTypeBase>(type)->getElementType());
+ sb << ">";
+ break;
+ case kIROp_HLSLAppendStructuredBufferType:
+ sb << "AppendStructuredBuffer<";
+ getTypeNameHint(sb, as<IRHLSLStructuredBufferTypeBase>(type)->getElementType());
+ sb << ">";
+ break;
+ case kIROp_HLSLConsumeStructuredBufferType:
+ sb << "ConsumeStructuredBuffer<";
+ getTypeNameHint(sb, as<IRHLSLStructuredBufferTypeBase>(type)->getElementType());
+ sb << ">";
+ break;
+ case kIROp_HLSLRasterizerOrderedStructuredBufferType:
+ sb << "RasterizerOrderedStructuredBuffer<";
+ getTypeNameHint(sb, as<IRHLSLStructuredBufferTypeBase>(type)->getElementType());
+ sb << ">";
+ break;
+ case kIROp_SamplerStateType:
+ sb << "SamplerState";
+ break;
+ case kIROp_SamplerComparisonStateType:
+ sb << "SamplerComparisonState";
+ break;
+ case kIROp_TextureFootprintType:
+ sb << "TextureFootprint";
+ break;
+ case kIROp_Specialize:
+ {
+ auto specialize = as<IRSpecialize>(type);
+ getTypeNameHint(sb, specialize->getBase());
+ sb << "<";
+ bool isFirst = true;
+ for (UInt i = 0; i < specialize->getArgCount(); i++)
+ {
+ auto arg = specialize->getArg(i);
+ if (!arg->getDataType())
+ continue;
+ if (arg->getDataType()->getOp() == kIROp_WitnessTableType)
+ continue;
+ if (!isFirst) sb << ",";
+ getTypeNameHint(sb, arg);
+ isFirst = false;
+ }
+ sb << ">";
+ }
+ break;
+ case kIROp_AttributedType:
+ getTypeNameHint(sb, as<IRAttributedType>(type)->getBaseType());
+ break;
+ case kIROp_RateQualifiedType:
+ getTypeNameHint(sb, as<IRRateQualifiedType>(type)->getValueType());
break;
case kIROp_VectorType:
getTypeNameHint(sb, type->getOperand(0));