| 120 | } |
| 121 | |
| 122 | Status ProgramCache::GetSerializedCache( |
| 123 | const CLDevice& device, std::vector<uint8_t>* serialized_cache) const { |
| 124 | ::flatbuffers::FlatBufferBuilder builder; |
| 125 | std::vector<flatbuffers::Offset<data::Program>> serialized_programs; |
| 126 | for (auto& program : programs_) { |
| 127 | std::vector<uint8_t> binary; |
| 128 | RETURN_IF_ERROR(program.second.GetBinary(&binary)); |
| 129 | auto binary_offset = builder.CreateVector(binary); |
| 130 | data::ProgramBuilder program_builder(builder); |
| 131 | program_builder.add_fingerprint(program.first.fingerprint); |
| 132 | program_builder.add_binary(binary_offset); |
| 133 | serialized_programs.push_back(program_builder.Finish()); |
| 134 | } |
| 135 | auto driver_version = builder.CreateString(device.GetPlatformVersion()); |
| 136 | auto programs_s = builder.CreateVector(serialized_programs); |
| 137 | data::CompiledCacheBuilder cache_builder(builder); |
| 138 | cache_builder.add_driver_version(driver_version); |
| 139 | cache_builder.add_programs(programs_s); |
| 140 | data::FinishCompiledCacheBuffer(builder, cache_builder.Finish()); |
| 141 | size_t next_element = serialized_cache->size(); |
| 142 | serialized_cache->resize(serialized_cache->size() + builder.GetSize()); |
| 143 | memcpy(&(*serialized_cache)[next_element], builder.GetBufferPointer(), |
| 144 | builder.GetSize()); |
| 145 | return OkStatus(); |
| 146 | } |
| 147 | |
| 148 | } // namespace cl |
| 149 | } // namespace gpu |
no test coverage detected