diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2024-08-25 10:37:33 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2024-08-25 10:37:33 -0600 |
| commit | b8de67b0d85a6b0b2e95eedbeb60d07bf4b7e76f (patch) | |
| tree | e3dbc4da25aabec3bfcdc40514123f53bbdd7f44 /src | |
| parent | 243125d6d500deea4ea862ea9678cf795b54b499 (diff) | |
Fixed mtx otr export
Diffstat (limited to 'src')
| -rw-r--r-- | src/factories/MtxFactory.cpp | 52 | ||||
| -rw-r--r-- | src/factories/MtxFactory.h | 10 |
2 files changed, 37 insertions, 25 deletions
diff --git a/src/factories/MtxFactory.cpp b/src/factories/MtxFactory.cpp index 3098fe9..4e3e88c 100644 --- a/src/factories/MtxFactory.cpp +++ b/src/factories/MtxFactory.cpp @@ -107,26 +107,12 @@ ExportResult MtxBinaryExporter::Export(std::ostream &write, std::shared_ptr<IPar auto writer = LUS::BinaryWriter(); WriteHeader(writer, Torch::ResourceType::Matrix, 0); - writer.Write((uint32_t) mtx->mMtxs.size()); - for(auto m : mtx->mMtxs) { - writer.Write(m.mtx[0]); - writer.Write(m.mtx[1]); - writer.Write(m.mtx[2]); - writer.Write(m.mtx[3]); - writer.Write(m.mtx[4]); - writer.Write(m.mtx[5]); - writer.Write(m.mtx[6]); - writer.Write(m.mtx[7]); - writer.Write(m.mtx[8]); - writer.Write(m.mtx[9]); - writer.Write(m.mtx[10]); - writer.Write(m.mtx[11]); - writer.Write(m.mtx[12]); - writer.Write(m.mtx[13]); - writer.Write(m.mtx[14]); - writer.Write(m.mtx[15]); + + for(size_t i = 0; i < 4; i++){ + for(size_t j = 0; j < 4; j++){ + writer.Write(mtx->mMtxs[0].mt.mint[i][j]); + } } - //throw std::runtime_error("Mtx not tested for otr/o2r."); writer.Finish(write); return std::nullopt; } @@ -144,6 +130,7 @@ std::optional<std::shared_ptr<IParsedData>> MtxFactory::parse(std::vector<uint8_ // Reads the inteer portion, the fractional portion, puts each together into a fixed-point value, and finally converts to float. for(size_t i = 0; i < 1; i++) { + // Read the integer portion of the fixed-point value (ex. 4) auto i1 = reader.ReadInt16(); auto i2 = reader.ReadInt16(); @@ -198,13 +185,28 @@ std::optional<std::shared_ptr<IParsedData>> MtxFactory::parse(std::vector<uint8_ auto m15 = FIXTOF( (int32_t) ( (i15 << 16) | f15 ) ); auto m16 = FIXTOF( (int32_t) ( (i16 << 16) | f16 ) ); - matrix.push_back(MtxRaw({ - m1, m2, m3, m4, - m5, m6, m7, m8, - m9, m10, m11, m12, - m13, m14, m15, m16, - })); + .mtx = { + m1, m2, m3, m4, + m5, m6, m7, m8, + m9, m10, m11, m12, + m13, m14, m15, m16, + }, + .mt = MtxS {{ + { + i1, i2, i3, i4, + i5, i6, i7, i8, + i9, i10, i11, i12, + i13, i14, i15, i16, + }, + { + f1, f2, f3, f4, + f5, f6, f7, f8, + f9, f10, f11, f12, + f13, f14, f15, f16, + } + }} + })); } #undef FIXTOF diff --git a/src/factories/MtxFactory.h b/src/factories/MtxFactory.h index cc3f7df..7348536 100644 --- a/src/factories/MtxFactory.h +++ b/src/factories/MtxFactory.h @@ -2,8 +2,18 @@ #include "BaseFactory.h" +union MtxS { + struct { + int16_t intPart[16]; + uint16_t fracPart[16]; + }; + int32_t mint[4][4]; + long long int forc_structure_alignment; +}; + struct MtxRaw { float mtx[16]; + MtxS mt; }; class MtxData : public IParsedData { |
