diff options
| author | Yong He <yonghe@outlook.com> | 2025-01-28 01:30:08 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-28 01:30:08 -0800 |
| commit | 4b9a34249d560a86d1333420f6cd06f6fe502c9d (patch) | |
| tree | 4fe93071aaf3468812b226af690b0341bec2a4d3 /source | |
| parent | cd27fbd1d3822f6da4d539ad467b9af2ad159526 (diff) | |
Fix geometry shader related modifier lowering. (#6197)
* Fix geometry shader related modifier lowering.
* Cleanup.
* Delete obselete test.
* Enable geometryShader test on windows only.
* Fix test.
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-lower-to-ir.cpp | 68 |
1 files changed, 24 insertions, 44 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp index 7281b55be..76b8e38e9 100644 --- a/source/slang/slang-lower-to-ir.cpp +++ b/source/slang/slang-lower-to-ir.cpp @@ -2333,6 +2333,30 @@ void addVarDecorations(IRGenContext* context, IRInst* inst, Decl* decl) inst, IRIntegerValue(collection->getMemoryQualifierBit())); } + else if (auto geometryModifier = as<HLSLGeometryShaderInputPrimitiveTypeModifier>(mod)) + { + IROp op = kIROp_Invalid; + switch (geometryModifier->astNodeType) + { + case ASTNodeType::HLSLTriangleModifier: + op = kIROp_TriangleInputPrimitiveTypeDecoration; + break; + case ASTNodeType::HLSLPointModifier: + op = kIROp_PointInputPrimitiveTypeDecoration; + break; + case ASTNodeType::HLSLLineModifier: + op = kIROp_LineInputPrimitiveTypeDecoration; + break; + case ASTNodeType::HLSLLineAdjModifier: + op = kIROp_LineAdjInputPrimitiveTypeDecoration; + break; + case ASTNodeType::HLSLTriangleAdjModifier: + op = kIROp_TriangleAdjInputPrimitiveTypeDecoration; + break; + } + if (op != kIROp_Invalid) + builder->addDecoration(inst, op); + } // TODO: what are other modifiers we need to propagate through? } if (auto t = @@ -11180,50 +11204,6 @@ static void lowerFrontEndEntryPointToIR( entryPointName->text.getUnownedSlice(), moduleName.getUnownedSlice()); } - - // Go through the entry point parameters creating decorations from layout as appropriate - // But only if this is a definition not a declaration - if (isDefinition(instToDecorate)) - { - FilteredMemberList<ParamDecl> params = entryPointFuncDecl->getParameters(); - - IRGlobalValueWithParams* valueWithParams = as<IRGlobalValueWithParams>(instToDecorate); - if (valueWithParams) - { - IRParam* irParam = valueWithParams->getFirstParam(); - - for (auto param : params) - { - if (auto modifier = - param->findModifier<HLSLGeometryShaderInputPrimitiveTypeModifier>()) - { - IROp op = kIROp_Invalid; - - if (as<HLSLTriangleModifier>(modifier)) - op = kIROp_TriangleInputPrimitiveTypeDecoration; - else if (as<HLSLPointModifier>(modifier)) - op = kIROp_PointInputPrimitiveTypeDecoration; - else if (as<HLSLLineModifier>(modifier)) - op = kIROp_LineInputPrimitiveTypeDecoration; - else if (as<HLSLLineAdjModifier>(modifier)) - op = kIROp_LineAdjInputPrimitiveTypeDecoration; - else if (as<HLSLTriangleAdjModifier>(modifier)) - op = kIROp_TriangleAdjInputPrimitiveTypeDecoration; - - if (op != kIROp_Invalid) - { - builder->addDecoration(irParam, op); - } - else - { - SLANG_UNEXPECTED("unhandled primitive type"); - } - } - - irParam = irParam->getNextParam(); - } - } - } } static void lowerProgramEntryPointToIR( |
