From f0088335bbe5e91d3463ca756e7012cfcc2d645a Mon Sep 17 00:00:00 2001 From: Megvii Engine Team Date: Wed, 15 Jun 2022 15:22:25 +0800 Subject: [PATCH] feat(mgb): upgrade flatbuffer GitOrigin-RevId: 7b1a04934ea3a7936661bb0558e4c58b258cdff2 --- src/serialization/impl/file.cpp | 6 +++--- src/serialization/impl/serializer_oss.cpp | 11 ++++------- src/serialization/impl/serializer_oss_v2.cpp | 11 ++++------- src/serialization/include/megbrain/serialization/file.h | 2 +- toolchains/ios.toolchain.cmake | 4 ++-- 5 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/serialization/impl/file.cpp b/src/serialization/impl/file.cpp index 969d9dd1..0d2e4341 100644 --- a/src/serialization/impl/file.cpp +++ b/src/serialization/impl/file.cpp @@ -33,7 +33,7 @@ public: void rewind() override { std::rewind(m_fptr); } - void skip(size_t bytes) override { + void skip(int64_t bytes) override { auto err = fseek(m_fptr, bytes, SEEK_CUR); mgb_assert(!err); } @@ -104,7 +104,7 @@ public: void rewind() override { m_offset = 0; } - void skip(size_t bytes) override { + void skip(int64_t bytes) override { m_offset += bytes; mgb_assert(m_offset <= m_size); } @@ -146,7 +146,7 @@ public: m_offset = 0; } - void skip(size_t bytes) override { + void skip(int64_t bytes) override { m_offset += bytes; mgb_assert(m_offset <= m_size); } diff --git a/src/serialization/impl/serializer_oss.cpp b/src/serialization/impl/serializer_oss.cpp index 6d3183f5..fb03d04d 100644 --- a/src/serialization/impl/serializer_oss.cpp +++ b/src/serialization/impl/serializer_oss.cpp @@ -838,25 +838,22 @@ GraphLoader::LoadResult GraphLoaderOSS::load(const LoadConfig& config, bool rewi // Read fbs::Graph uint32_t size; m_file->read(&size, sizeof(size)); - m_graph_buf = m_file->read_shared(size); + m_file->skip(-sizeof(size)); + m_graph_buf = m_file->read_shared(size + sizeof(size)); // Rewind back to tensor data m_file->rewind(); m_file->skip(tensor_begin); - mgb_throw_if( - !fbs::GraphBufferHasIdentifier(m_graph_buf.data()), SerializationError, - "invalid fbs model"); - { flatbuffers::Verifier verifier( static_cast(m_graph_buf.data()), m_graph_buf.size()); mgb_throw_if( - !fbs::VerifyGraphBuffer(verifier), SerializationError, + !fbs::VerifySizePrefixedGraphBuffer(verifier), SerializationError, "model verification failed (invalid or corrupted model?)"); } - m_graph = fbs::GetGraph(m_graph_buf.data()); + m_graph = fbs::GetSizePrefixedGraph(m_graph_buf.data()); m_mgb_version = m_graph->mgb_version(); if (m_graph->mgb_version() > MGB_VERSION) { mgb_log_warn( diff --git a/src/serialization/impl/serializer_oss_v2.cpp b/src/serialization/impl/serializer_oss_v2.cpp index f0c5a4a3..c1e94e14 100644 --- a/src/serialization/impl/serializer_oss_v2.cpp +++ b/src/serialization/impl/serializer_oss_v2.cpp @@ -801,21 +801,18 @@ GraphLoader::LoadResult GraphLoaderOSSV2::load(const LoadConfig& config, bool re // Read fbs::Graph uint32_t size; m_file->read(&size, sizeof(size)); - m_model_buf = m_file->read_shared(size); - - mgb_throw_if( - !fbs::v2::ModelBufferHasIdentifier(m_model_buf.data()), SerializationError, - "invalid fbs model"); + m_file->skip(-sizeof(size)); + m_model_buf = m_file->read_shared(size + sizeof(size)); { flatbuffers::Verifier verifier( static_cast(m_model_buf.data()), m_model_buf.size()); mgb_throw_if( - !fbs::v2::VerifyModelBuffer(verifier), SerializationError, + !fbs::v2::VerifySizePrefixedModelBuffer(verifier), SerializationError, "model verification failed (invalid or corrupted model?)"); } - m_model = fbs::v2::GetModel(m_model_buf.data()); + m_model = fbs::v2::GetSizePrefixedModel(m_model_buf.data()); m_mgb_version = m_model->mge_version(); m_model_version = m_model->model_version(); if (m_model->mge_version() > MGB_VERSION) { diff --git a/src/serialization/include/megbrain/serialization/file.h b/src/serialization/include/megbrain/serialization/file.h index d1d9d66e..8fc1b2a0 100644 --- a/src/serialization/include/megbrain/serialization/file.h +++ b/src/serialization/include/megbrain/serialization/file.h @@ -33,7 +33,7 @@ public: virtual void rewind() = 0; //! skip given number of bytes - virtual void skip(size_t bytes) = 0; + virtual void skip(int64_t bytes) = 0; //! read data into buffer virtual void read(void* dst, size_t size) = 0; diff --git a/toolchains/ios.toolchain.cmake b/toolchains/ios.toolchain.cmake index c57174ff..ab6b9ff9 100644 --- a/toolchains/ios.toolchain.cmake +++ b/toolchains/ios.toolchain.cmake @@ -217,10 +217,10 @@ if(NOT DEFINED IOS_DEPLOYMENT_TARGET) "2.0" CACHE STRING "Minimum iOS version to build for.") else() - # Unless specified, SDK version 10.0 is used by default as minimum target version + # Unless specified, SDK version 11.0 is used by default as minimum target version # (iOS, tvOS). set(IOS_DEPLOYMENT_TARGET - "10.0" + "11.0" CACHE STRING "Minimum iOS version to build for.") endif() message(