From 6f7c8271710b43349d34b8f7569ceb6957400548 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 12 Mar 2024 19:31:25 -0700 Subject: Fix `sessionDesc.defaultMatrixLayoutMode` being ineffective. (#3753) * Fix `sessionDesc.defaultMatrixLayoutMode` being ineffective. * Fix matrix layout in buffer pointer. * Attempt to fix. * Fix buffer element type lowering for buffer pointers. * Add comment. * Fix test. * Fix member lookup in `Ref`. * Fix validation error. * Enhance test. --- source/slang/slang-check-expr.cpp | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'source/slang/slang-check-expr.cpp') diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp index ea6afdc1d..995b5e888 100644 --- a/source/slang/slang-check-expr.cpp +++ b/source/slang/slang-check-expr.cpp @@ -4164,15 +4164,39 @@ namespace Slang List modifierVals; for( auto modifier : expr->modifiers ) { + if (auto matrixLayoutModifier = as(modifier)) + { + if (auto matrixType = as(baseType)) + { + if (as(matrixLayoutModifier)) + { + baseType = m_astBuilder->getMatrixType(matrixType->getElementType(), matrixType->getRowCount(), matrixType->getColumnCount(), + m_astBuilder->getIntVal(m_astBuilder->getIntType(), kMatrixLayoutMode_ColumnMajor)); + } + else + { + baseType = m_astBuilder->getMatrixType(matrixType->getElementType(), matrixType->getRowCount(), matrixType->getColumnCount(), + m_astBuilder->getIntVal(m_astBuilder->getIntType(), kMatrixLayoutMode_RowMajor)); + } + expr->type = m_astBuilder->getTypeType(baseType); + } + else + { + getSink()->diagnose(matrixLayoutModifier, Diagnostics::matrixLayoutModifierOnNonMatrixType, baseType); + } + continue; + } auto modifierVal = checkTypeModifier(modifier, baseType); if(!modifierVal) continue; modifierVals.add(modifierVal); } - auto modifiedType = m_astBuilder->getModifiedType(baseType, modifierVals); - expr->type = m_astBuilder->getTypeType(modifiedType); - + if (modifierVals.getCount()) + { + auto modifiedType = m_astBuilder->getModifiedType(baseType, modifierVals); + expr->type = m_astBuilder->getTypeType(modifiedType); + } return expr; } -- cgit v1.2.3