77
88template <>
99Status ApplyTemplate<" tensor/pad.wgsl.template" >(ShaderHelper& shader_helper, TemplateParameter<" tensor/pad.wgsl.template" >::type params) {
10- OStringStream* ss_ptr = & shader_helper.AdditionalImplementation ();
10+ [[maybe_unused]] auto & ss = shader_helper.AdditionalImplementation ();
1111
1212 // Extract parameters
1313 auto & __param_dim_value_zero = params.param_dim_value_zero ;
@@ -18,51 +18,51 @@ Status ApplyTemplate<"tensor/pad.wgsl.template">(ShaderHelper& shader_helper, Te
1818 auto & __var_output = *params.var_output ;
1919
2020MainFunctionStart ();
21- (*ss_ptr) << " \n " ;
22- (*ss_ptr) << shader_helper.GuardAgainstOutOfBoundsWorkgroupSizes (" uniforms.output_size" );
23- (*ss_ptr) << " ;\n\n let constant_value =\n " ;
21+ ss << " \n " ;
22+ ss << shader_helper.GuardAgainstOutOfBoundsWorkgroupSizes (" uniforms.output_size" );
23+ ss << " ;\n\n let constant_value =\n " ;
2424if (__param_is_float16) {
25- (*ss_ptr) << " bitcast<vec2<f16>>(uniforms.constant_value)[0];\n " ;
25+ ss << " bitcast<vec2<f16>>(uniforms.constant_value)[0];\n " ;
2626} else {
27- (*ss_ptr) << " bitcast<output_value_t>(uniforms.constant_value);\n " ;
27+ ss << " bitcast<output_value_t>(uniforms.constant_value);\n " ;
2828}
2929if (__param_dim_value_zero) {
30- (*ss_ptr) << " output[global_idx] = constant_value;\n " ;
30+ ss << " output[global_idx] = constant_value;\n " ;
3131} else {
32- (*ss_ptr) << " let output_indices = " ;
33- (*ss_ptr) << __var_output.OffsetToIndices (" global_idx" );
34- (*ss_ptr) << " ;\n var input_index = u32(0);\n var use_pad_value = false;\n var in_coord = i32(0);\n\n for (var dim = 0; dim < " ;
35- (*ss_ptr) << __var_output.Rank ();
36- (*ss_ptr) << " && !use_pad_value; dim++) {\n let output_index = i32(" ;
37- (*ss_ptr) << GetElementAt (" output_indices" , " dim" , __var_output.Rank ());
38- (*ss_ptr) << " );\n let lower_pads = " ;
39- (*ss_ptr) << GetElementAt (" uniforms.lower_pads" , " dim" , __var_output.Rank ());
40- (*ss_ptr) << " ;\n let data_shape = i32(" ;
41- (*ss_ptr) << GetElementAt (" uniforms.data_shape" , " dim" , __var_output.Rank ());
42- (*ss_ptr) << " );\n " ;
32+ ss << " let output_indices = " ;
33+ ss << __var_output.OffsetToIndices (" global_idx" );
34+ ss << " ;\n var input_index = u32(0);\n var use_pad_value = false;\n var in_coord = i32(0);\n\n for (var dim = 0; dim < " ;
35+ ss << __var_output.Rank ();
36+ ss << " && !use_pad_value; dim++) {\n let output_index = i32(" ;
37+ ss << GetElementAt (" output_indices" , " dim" , __var_output.Rank ());
38+ ss << " );\n let lower_pads = " ;
39+ ss << GetElementAt (" uniforms.lower_pads" , " dim" , __var_output.Rank ());
40+ ss << " ;\n let data_shape = i32(" ;
41+ ss << GetElementAt (" uniforms.data_shape" , " dim" , __var_output.Rank ());
42+ ss << " );\n " ;
4343if (__param_pad_mode == 0 ) {
44- (*ss_ptr) << " if (output_index < lower_pads || output_index >= data_shape + lower_pads) {\n use_pad_value = true;\n " ;
44+ ss << " if (output_index < lower_pads || output_index >= data_shape + lower_pads) {\n use_pad_value = true;\n " ;
4545} else if (__param_pad_mode == 2 ) {
46- (*ss_ptr) << " if (output_index < lower_pads) {\n in_coord = 0;\n } else if (output_index >= data_shape + lower_pads) {\n in_coord = data_shape - 1;\n " ;
46+ ss << " if (output_index < lower_pads) {\n in_coord = 0;\n } else if (output_index >= data_shape + lower_pads) {\n in_coord = data_shape - 1;\n " ;
4747} else if (__param_pad_mode == 1 ) {
48- (*ss_ptr) << " if (output_index < lower_pads || output_index >= data_shape + lower_pads) {\n in_coord = output_index - lower_pads;\n if (in_coord < 0) {\n in_coord = -in_coord;\n }\n let _2n_1 = 2 * (data_shape - 1);\n in_coord = in_coord % _2n_1;\n if (in_coord >= data_shape) {\n in_coord = _2n_1 - in_coord;\n }\n " ;
48+ ss << " if (output_index < lower_pads || output_index >= data_shape + lower_pads) {\n in_coord = output_index - lower_pads;\n if (in_coord < 0) {\n in_coord = -in_coord;\n }\n let _2n_1 = 2 * (data_shape - 1);\n in_coord = in_coord % _2n_1;\n if (in_coord >= data_shape) {\n in_coord = _2n_1 - in_coord;\n }\n " ;
4949} else {
50- (*ss_ptr) << " if (output_index < lower_pads) {\n in_coord = data_shape + output_index - lower_pads;\n } else if (output_index >= data_shape + lower_pads) {\n in_coord = output_index - data_shape - lower_pads;\n " ;
50+ ss << " if (output_index < lower_pads) {\n in_coord = data_shape + output_index - lower_pads;\n } else if (output_index >= data_shape + lower_pads) {\n in_coord = output_index - data_shape - lower_pads;\n " ;
5151}
52- (*ss_ptr) << " } else {\n in_coord = output_index - lower_pads;\n }\n\n input_index += select(u32(in_coord)\n " ;
52+ ss << " } else {\n in_coord = output_index - lower_pads;\n }\n\n input_index += select(u32(in_coord)\n " ;
5353if (__var_output.Rank () > 1 ) {
54- (*ss_ptr) << " * " ;
55- (*ss_ptr) << GetElementAt (" uniforms.data_stride" , " dim" , __var_output.Rank () - 1 );
56- (*ss_ptr) << " \n " ;
54+ ss << " * " ;
55+ ss << GetElementAt (" uniforms.data_stride" , " dim" , __var_output.Rank () - 1 );
56+ ss << " \n " ;
5757}
58- (*ss_ptr) << " , u32(in_coord), dim == " ;
59- (*ss_ptr) << __var_output.Rank ();
60- (*ss_ptr) << " - 1);\n }\n\n " ;
61- (*ss_ptr) << __var_output.SetByOffset (" global_idx" , " select(data[input_index], constant_value, use_pad_value)" );
62- (*ss_ptr) << " ;\n " ;
58+ ss << " , u32(in_coord), dim == " ;
59+ ss << __var_output.Rank ();
60+ ss << " - 1);\n }\n\n " ;
61+ ss << __var_output.SetByOffset (" global_idx" , " select(data[input_index], constant_value, use_pad_value)" );
62+ ss << " ;\n " ;
6363}
6464MainFunctionEnd ();
65- (*ss_ptr) << " \n " ;
65+ ss << " \n " ;
6666
6767
6868 return Status::OK ();
0 commit comments