| 323 | } |
| 324 | |
| 325 | void SerializedCompiledModelBuilder::AddProgram( |
| 326 | const std::vector<Variable>& parameters, const std::vector<Object>& objects, |
| 327 | const uint3& workgroup_size, const uint3& num_workgroups, |
| 328 | size_t shader_index) { |
| 329 | Offset<data::Uint3> fb_workgroups = Encode(num_workgroups, &builder_); |
| 330 | Offset<data::Uint3> fb_workgroup_size = Encode(workgroup_size, &builder_); |
| 331 | |
| 332 | Offset<Vector<Offset<data::UniformParameter>>> fb_params; |
| 333 | { |
| 334 | std::vector<Offset<data::UniformParameter>> offsets; |
| 335 | for (const Variable& param : parameters) { |
| 336 | auto name = builder_.CreateString(param.name); |
| 337 | auto data = absl::visit(ParameterValueGetter{&builder_}, param.value); |
| 338 | data::UniformParameterBuilder builder(builder_); |
| 339 | builder.add_name(name); |
| 340 | builder.add_data_type(absl::visit(DataVariantTypeGetter{}, param.value)); |
| 341 | builder.add_data(data); |
| 342 | builder.add_type(absl::visit(ParameterTypeGetter{}, param.value)); |
| 343 | offsets.push_back(builder.Finish()); |
| 344 | } |
| 345 | fb_params = builder_.CreateVector(offsets); |
| 346 | } |
| 347 | |
| 348 | Offset<Vector<Offset<data::Object>>> fb_objects; |
| 349 | { |
| 350 | std::vector<Offset<data::Object>> offsets; |
| 351 | for (const Object& object : objects) { |
| 352 | auto object_variant = absl::visit(ObjectGetter{&builder_}, object.object); |
| 353 | auto size = absl::visit(ObjectSizeGetter{&builder_}, object.size); |
| 354 | |
| 355 | data::ObjectBuilder builder(builder_); |
| 356 | builder.add_access(ToFB(object.access)); |
| 357 | builder.add_binding(object.binding); |
| 358 | builder.add_type(ToFB(object.object_type)); |
| 359 | builder.add_data_type(ToFB(object.data_type)); |
| 360 | builder.add_size_type(absl::visit(ObjectSizeTypeGetter{}, object.size)); |
| 361 | builder.add_size(size); |
| 362 | builder.add_object_type(absl::visit(ObjectTypeGetter{}, object.object)); |
| 363 | builder.add_object(object_variant); |
| 364 | offsets.push_back(builder.Finish()); |
| 365 | } |
| 366 | fb_objects = builder_.CreateVector(offsets); |
| 367 | } |
| 368 | |
| 369 | data::ProgramBuilder program_builder(builder_); |
| 370 | program_builder.add_number_workgroups(fb_workgroups); |
| 371 | program_builder.add_workgroup_size(fb_workgroup_size); |
| 372 | program_builder.add_parameters(fb_params); |
| 373 | program_builder.add_objects(fb_objects); |
| 374 | program_builder.add_shader_index(shader_index); |
| 375 | programs_.push_back(program_builder.Finish()); |
| 376 | } |
| 377 | |
| 378 | absl::Span<const uint8_t> SerializedCompiledModelBuilder::Finalize( |
| 379 | const CompiledModelOptions& options) { |
nothing calls this directly
no test coverage detected