@@ -1453,8 +1453,10 @@ auto FunctionBuilderBuilder::build(const clang::FunctionDecl *S, bool allowKerne
1453
1453
// LUISA_WARNING("Set kernel arg. {}", luisa::string_view{});
1454
1454
// }
1455
1455
if (auto lcType = db->FindOrAddType (Ty, param->getBeginLoc ())) {
1456
+ BuildArgument *build_arg = nullptr ;
1456
1457
if (is_kernel) {
1457
- db->refl .kernel_args .emplace_back (lcType, luisa::string{param->getName ().data (), param->getName ().size ()});
1458
+ db->refl .kernel_args .emplace_back (lcType, luisa::string{param->getName ().data (), param->getName ().size ()}, ~0u );
1459
+ build_arg = &db->refl .kernel_args .back ();
1458
1460
}
1459
1461
const luisa::compute::RefExpr *local = nullptr ;
1460
1462
switch (lcType->tag ()) {
@@ -1485,6 +1487,9 @@ auto FunctionBuilderBuilder::build(const clang::FunctionDecl *S, bool allowKerne
1485
1487
local = LC_ArgOrRef (Ty, builder, lcType);
1486
1488
} break ;
1487
1489
}
1490
+ if (build_arg && local) {
1491
+ build_arg->resource_var_id = local->variable ().uid ();
1492
+ }
1488
1493
stack.SetLocal (param, local);
1489
1494
return local;
1490
1495
} else {
@@ -1692,6 +1697,10 @@ ASTConsumer::~ASTConsumer() {
1692
1697
} else {
1693
1698
if (kernel_arg_reflect) {
1694
1699
*kernel_arg_reflect = std::move (db.refl );
1700
+ kernel_arg_reflect->block_size = db.kernel_builder ->block_size ();
1701
+ for (auto &i : kernel_arg_reflect->kernel_args ) {
1702
+ i.var_usage = db.kernel_builder ->variable_usage (i.resource_var_id );
1703
+ }
1695
1704
}
1696
1705
device->impl ()->create_shader (option, luisa::compute::Function{db.kernel_builder .get ()});
1697
1706
}
0 commit comments