1414
1515namespace vkcompute {
1616
17+ uint32_t PushConstantDataInfo::write (
18+ void * dst,
19+ const uint32_t dst_offset,
20+ const uint32_t max_dst_size) const {
21+ if (tensorUniformData != nullptr ) {
22+ return tensorUniformData->write_attribute (
23+ dst, dst_offset, max_dst_size, payload_.attr );
24+ }
25+
26+ VK_CHECK_COND (
27+ (dst_offset + payload_.dataSize ) <= max_dst_size,
28+ " Attempting to write push constant data outside data boundary." );
29+ memcpy ((uint8_t *)dst + dst_offset, payload_.data , payload_.dataSize );
30+ return payload_.dataSize ;
31+ }
32+
1733DispatchNode::DispatchNode (
1834 ComputeGraph& graph,
1935 const vkapi::ShaderInfo& shader,
@@ -23,13 +39,15 @@ DispatchNode::DispatchNode(
2339 const vkapi::ParamsBindList& params,
2440 const vkapi::SpecVarList& spec_vars,
2541 const ResizeFunction& resize_fn,
26- const std::vector<ValueRef>& resize_args)
42+ const std::vector<ValueRef>& resize_args,
43+ const std::vector<PushConstantDataInfo>& push_constants)
2744 : ExecuteNode(resize_fn, resize_args, args, shader.kernel_name),
2845 shader_ (shader),
2946 global_workgroup_size_(global_workgroup_size),
3047 local_workgroup_size_(local_workgroup_size),
3148 params_(params),
32- spec_vars_(spec_vars) {
49+ spec_vars_(spec_vars),
50+ push_constants_(push_constants) {
3351 graph.update_descriptor_counts (shader, /* execute = */ true );
3452}
3553
@@ -57,8 +75,22 @@ void DispatchNode::encode(ComputeGraph* graph) {
5775
5876 bind_params_to_descriptor_set (params_, descriptor_set, idx);
5977
78+ std::array<uint8_t , kMaxPushConstantSize > push_constants_data;
79+ uint32_t push_constants_offset = 0 ;
80+
81+ for (const auto & push_constant : push_constants_) {
82+ push_constants_offset += push_constant.write (
83+ push_constants_data.data (),
84+ push_constants_offset,
85+ kMaxPushConstantSize );
86+ }
6087 context->register_shader_dispatch (
61- descriptor_set, pipeline_barrier, shader_, global_workgroup_size_);
88+ descriptor_set,
89+ pipeline_barrier,
90+ shader_,
91+ global_workgroup_size_,
92+ push_constants_data.data (),
93+ push_constants_offset);
6294
6395 context->report_shader_dispatch_end ();
6496}
0 commit comments