@@ -25,9 +25,9 @@ DynamicDispatchNode::DynamicDispatchNode(
2525 const ResizeFunction& resize_fn)
2626 : DispatchNode(
2727 graph,
28- pick_shader_fn (&graph, args, resize_args ),
29- pick_global_wg_fn(&graph, args, resize_args) ,
30- pick_local_wg_fn(&graph, args, resize_args) ,
28+ vkapi::ShaderInfo ( ),
29+ { 1u , 1u , 1u } ,
30+ { 1u , 1u , 1u } ,
3131 args,
3232 params,
3333 push_constants,
@@ -36,13 +36,57 @@ DynamicDispatchNode::DynamicDispatchNode(
3636 resize_fn),
3737 pick_shader_fn_ (pick_shader_fn),
3838 pick_global_wg_fn_ (pick_global_wg_fn),
39+ pick_local_wg_fn_ (pick_local_wg_fn) {
40+ shader_ = pick_shader_fn (&graph, args, resize_args);
41+ global_workgroup_size_ =
42+ pick_global_wg_fn (&graph, shader_, args, resize_args);
43+ local_workgroup_size_ = utils::WorkgroupSize (pick_local_wg_fn (
44+ &graph, shader_, global_workgroup_size_, args, resize_args));
45+ }
46+
47+ DynamicDispatchNode::DynamicDispatchNode (
48+ ComputeGraph& graph,
49+ const vkapi::ShaderInfo& shader,
50+ const PickGlobalFn& pick_global_wg_fn,
51+ const PickLocalFn& pick_local_wg_fn,
52+ const std::vector<ArgGroup>& args,
53+ const vkapi::ParamsBindList& params,
54+ const std::vector<PushConstantDataInfo>& push_constants,
55+ const vkapi::SpecVarList& spec_vars,
56+ const std::vector<ValueRef>& resize_args,
57+ const ResizeFunction& resize_fn)
58+ : DispatchNode(
59+ graph,
60+ shader,
61+ pick_global_wg_fn (&graph, shader, args, resize_args),
62+ pick_local_wg_fn(
63+ &graph,
64+ shader,
65+ pick_global_wg_fn (&graph, shader, args, resize_args),
66+ args,
67+ resize_args),
68+ args,
69+ params,
70+ push_constants,
71+ spec_vars,
72+ resize_args,
73+ resize_fn),
74+ pick_shader_fn_{nullptr },
75+ pick_global_wg_fn_ (pick_global_wg_fn),
3976 pick_local_wg_fn_(pick_local_wg_fn) {}
4077
4178void DynamicDispatchNode::encode (ComputeGraph* graph) {
42- shader_ = pick_shader_fn_ (graph, args_, resize_args_);
43- global_workgroup_size_ = pick_global_wg_fn_ (graph, args_, resize_args_);
44- local_workgroup_size_ =
45- utils::WorkgroupSize (pick_local_wg_fn_ (graph, args_, resize_args_));
79+ if (pick_shader_fn_) {
80+ shader_ = pick_shader_fn_ (graph, args_, resize_args_);
81+ }
82+ if (pick_global_wg_fn_) {
83+ global_workgroup_size_ =
84+ pick_global_wg_fn_ (graph, shader_, args_, resize_args_);
85+ }
86+ if (pick_local_wg_fn_) {
87+ local_workgroup_size_ = utils::WorkgroupSize (pick_local_wg_fn_ (
88+ graph, shader_, global_workgroup_size_, args_, resize_args_));
89+ }
4690 DispatchNode::encode (graph);
4791}
4892
0 commit comments