mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-12 21:10:42 +00:00
Fix incorrect serialisation of ProgramUniformValue. Closes #1019
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user