Fix incorrect serialisation of ProgramUniformValue. Closes #1019

This commit is contained in:
baldurk
2018-06-22 16:04:59 +01:00
parent 0d7dd0aaa7
commit 55c1ace6ef
3 changed files with 30 additions and 9 deletions
+5
View File
@@ -1069,6 +1069,11 @@ bool GLInitParams::IsSupportedVersion(uint64_t ver)
if(ver == 0x1A)
return true;
// 0x1B -> 0x1C - fixed incorrect float/double serialisation in serialisation of
// ProgramUniformValue
if(ver == 0x1B)
return true;
return false;
}
+1 -1
View File
@@ -53,7 +53,7 @@ struct GLInitParams
uint32_t height;
// check if a frame capture section version is supported
static const uint64_t CurrentVersion = 0x1B;
static const uint64_t CurrentVersion = 0x1C;
static bool IsSupportedVersion(uint64_t ver);
};
+24 -8
View File
@@ -245,14 +245,30 @@ void DoSerialise(SerialiserType &ser, ProgramUniformValue &el)
int32_t *iv = el.data.ival;
uint32_t *uv = el.data.uval;
if(baseType == VarType::Double)
ser.Serialise("data", fv, elemCount, SerialiserFlags::NoFlags);
else if(baseType == VarType::Float)
ser.Serialise("data", dv, elemCount, SerialiserFlags::NoFlags);
else if(baseType == VarType::Int)
ser.Serialise("data", iv, elemCount, SerialiserFlags::NoFlags);
else if(baseType == VarType::UInt)
ser.Serialise("data", uv, elemCount, SerialiserFlags::NoFlags);
// originally the logic was backwards and floats were serialised with dv and doubles with fv.
// This caused extra garbage to be written for floats, and truncated double data.
if(ser.VersionAtLeast(0x1C))
{
if(baseType == VarType::Float)
ser.Serialise("data", fv, elemCount, SerialiserFlags::NoFlags);
else if(baseType == VarType::Int)
ser.Serialise("data", iv, elemCount, SerialiserFlags::NoFlags);
else if(baseType == VarType::UInt)
ser.Serialise("data", uv, elemCount, SerialiserFlags::NoFlags);
else if(baseType == VarType::Double)
ser.Serialise("data", dv, elemCount, SerialiserFlags::NoFlags);
}
else
{
if(baseType == VarType::Double)
ser.Serialise("data", fv, elemCount, SerialiserFlags::NoFlags);
else if(baseType == VarType::Float)
ser.Serialise("data", dv, elemCount, SerialiserFlags::NoFlags);
else if(baseType == VarType::Int)
ser.Serialise("data", iv, elemCount, SerialiserFlags::NoFlags);
else if(baseType == VarType::UInt)
ser.Serialise("data", uv, elemCount, SerialiserFlags::NoFlags);
}
}
template <typename SerialiserType>