From fdc17a974970559d8ff76d52c3ce40aaa056d441 Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 19 Jan 2024 18:02:40 -0800 Subject: 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 --- source/slang/slang-ir-util.cpp | 190 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 189 insertions(+), 1 deletion(-) (limited to 'source/slang/slang-ir-util.cpp') 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(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(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(type)->getElementType()); + sb << ">"; + break; + case kIROp_ConstantBufferType: + sb << "cbuffer<"; + getTypeNameHint(sb, as(type)->getElementType()); + sb << ">"; + break; + case kIROp_TextureBufferType: + sb << "tbuffer<"; + getTypeNameHint(sb, as(type)->getElementType()); + sb << ">"; + break; + case kIROp_GLSLShaderStorageBufferType: + sb << "StorageBuffer<"; + getTypeNameHint(sb, as(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(type)->getValueType()); + sb << ">"; + break; + case kIROp_HLSLStructuredBufferType: + sb << "StructuredBuffer<"; + getTypeNameHint(sb, as(type)->getElementType()); + sb << ">"; + break; + case kIROp_HLSLRWStructuredBufferType: + sb << "RWStructuredBuffer<"; + getTypeNameHint(sb, as(type)->getElementType()); + sb << ">"; + break; + case kIROp_HLSLAppendStructuredBufferType: + sb << "AppendStructuredBuffer<"; + getTypeNameHint(sb, as(type)->getElementType()); + sb << ">"; + break; + case kIROp_HLSLConsumeStructuredBufferType: + sb << "ConsumeStructuredBuffer<"; + getTypeNameHint(sb, as(type)->getElementType()); + sb << ">"; + break; + case kIROp_HLSLRasterizerOrderedStructuredBufferType: + sb << "RasterizerOrderedStructuredBuffer<"; + getTypeNameHint(sb, as(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(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(type)->getBaseType()); + break; + case kIROp_RateQualifiedType: + getTypeNameHint(sb, as(type)->getValueType()); break; case kIROp_VectorType: getTypeNameHint(sb, type->getOperand(0)); -- cgit v1.2.3