diff options
Diffstat (limited to 'source/slang/slang-check-expr.cpp')
| -rw-r--r-- | source/slang/slang-check-expr.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp index 1f2776ba0..7972e2d81 100644 --- a/source/slang/slang-check-expr.cpp +++ b/source/slang/slang-check-expr.cpp @@ -312,12 +312,17 @@ static bool isMutableGLSLBufferBlockVarExpr(Expr* expr) const auto derefExpr = as<DerefExpr>(expr); if (!derefExpr) return false; - const auto varExpr = as<VarExpr>(derefExpr->base); + + // For SSBO arrays, derefExpr is expected to be IndexExpr instead of VarExpr + const auto indexExpr = as<IndexExpr>(derefExpr->base); + + const auto varExpr = + indexExpr ? as<VarExpr>(indexExpr->baseExpression) : as<VarExpr>(derefExpr->base); // Check the declaration type if (!varExpr) return false; - const auto varExprType = varExpr->type->getCanonicalType(); + const auto varExprType = (indexExpr ? indexExpr->type : varExpr->type)->getCanonicalType(); const auto ssbt = as<GLSLShaderStorageBufferType>(varExprType); if (!ssbt) return false; |
