summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2024-08-25 10:37:33 -0600
committerKiritoDv <kiritodev01@gmail.com>2024-08-25 10:37:33 -0600
commitb8de67b0d85a6b0b2e95eedbeb60d07bf4b7e76f (patch)
treee3dbc4da25aabec3bfcdc40514123f53bbdd7f44 /src
parent243125d6d500deea4ea862ea9678cf795b54b499 (diff)
Fixed mtx otr export
Diffstat (limited to 'src')
-rw-r--r--src/factories/MtxFactory.cpp52
-rw-r--r--src/factories/MtxFactory.h10
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 {