mirror of
https://github.com/g-truc/glm.git
synced 2024-11-30 03:44:38 +00:00
Fixed build
This commit is contained in:
parent
0abec19bc1
commit
b1230f2adc
@ -65,7 +65,7 @@ namespace detail
|
|||||||
((f >> 17) & 0x003f); // Mantissa
|
((f >> 17) & 0x003f); // Mantissa
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::uint32 packed11Tofloat(glm::uint32 const & p)
|
glm::uint32 packed11ToFloat(glm::uint32 const & p)
|
||||||
{
|
{
|
||||||
// 10 bits => EE EEEFFFFF
|
// 10 bits => EE EEEFFFFF
|
||||||
// 11 bits => EEE EEFFFFFF
|
// 11 bits => EEE EEFFFFFF
|
||||||
@ -80,7 +80,7 @@ namespace detail
|
|||||||
// 0x00008000 => 00000000 00000000 10000000 00000000
|
// 0x00008000 => 00000000 00000000 10000000 00000000
|
||||||
return
|
return
|
||||||
((((p & 0x07c0) << 17) + 0x38000000) & 0x7f800000) | // exponential
|
((((p & 0x07c0) << 17) + 0x38000000) & 0x7f800000) | // exponential
|
||||||
((f & 0x003f) << 17); // Mantissa
|
((p & 0x003f) << 17); // Mantissa
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::uint32 float2packed10(glm::uint32 const & f)
|
glm::uint32 float2packed10(glm::uint32 const & f)
|
||||||
@ -122,7 +122,7 @@ namespace detail
|
|||||||
// 0x00008000 => 00000000 00000000 10000000 00000000
|
// 0x00008000 => 00000000 00000000 10000000 00000000
|
||||||
return
|
return
|
||||||
((((p & 0x03E0) << 18) + 0x38000000) & 0x7f800000) | // exponential
|
((((p & 0x03E0) << 18) + 0x38000000) & 0x7f800000) | // exponential
|
||||||
((f & 0x001f) << 18); // Mantissa
|
((p & 0x001f) << 18); // Mantissa
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::uint half2float(glm::uint const & h)
|
glm::uint half2float(glm::uint const & h)
|
||||||
@ -257,6 +257,17 @@ namespace detail
|
|||||||
uint16 pack;
|
uint16 pack;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
union half4x16
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
hdata x;
|
||||||
|
hdata y;
|
||||||
|
hdata z;
|
||||||
|
hdata w;
|
||||||
|
} data;
|
||||||
|
uint64 pack;
|
||||||
|
};
|
||||||
|
|
||||||
union unorm1x8
|
union unorm1x8
|
||||||
{
|
{
|
||||||
@ -438,18 +449,25 @@ namespace detail
|
|||||||
return detail::toFloat32(Packing.data);
|
return detail::toFloat32(Packing.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
GLM_FUNC_DECL uint64 packHalf4x16(float const & v)
|
GLM_FUNC_DECL uint64 packHalf4x16(glm::vec4 const & v)
|
||||||
{
|
{
|
||||||
detail::half4x16 Packing;
|
detail::half4x16 Packing;
|
||||||
Packing.data = detail::toFloat16(v);
|
Packing.data.x = detail::toFloat16(v.x);
|
||||||
|
Packing.data.y = detail::toFloat16(v.y);
|
||||||
|
Packing.data.z = detail::toFloat16(v.z);
|
||||||
|
Packing.data.w = detail::toFloat16(v.w);
|
||||||
return Packing.pack;
|
return Packing.pack;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLM_FUNC_DECL float unpackHalf4x16(uint64 const & v)
|
GLM_FUNC_DECL glm::vec4 unpackHalf4x16(uint64 const & v)
|
||||||
{
|
{
|
||||||
detail::half4x16 Packing;
|
detail::half4x16 Packing;
|
||||||
Packing.pack = v;
|
Packing.pack = v;
|
||||||
return detail::toFloat32(Packing.data);
|
return glm::vec4(
|
||||||
|
detail::toFloat32(Packing.data.x),
|
||||||
|
detail::toFloat32(Packing.data.y),
|
||||||
|
detail::toFloat32(Packing.data.z),
|
||||||
|
detail::toFloat32(Packing.data.w));
|
||||||
}
|
}
|
||||||
|
|
||||||
GLM_FUNC_QUALIFIER uint32 packI3x10_1x2(ivec4 const & v)
|
GLM_FUNC_QUALIFIER uint32 packI3x10_1x2(ivec4 const & v)
|
||||||
@ -549,9 +567,9 @@ namespace detail
|
|||||||
GLM_FUNC_QUALIFIER vec3 unpackF2x11_1x10(uint32 const & v)
|
GLM_FUNC_QUALIFIER vec3 unpackF2x11_1x10(uint32 const & v)
|
||||||
{
|
{
|
||||||
return vec3(
|
return vec3(
|
||||||
packed11bitToFloat(v >> 0),
|
detail::packed11bitToFloat(v >> 0),
|
||||||
packed11bitToFloat(v >> 11),
|
detail::packed11bitToFloat(v >> 11),
|
||||||
packed10bitToFloat(v >> 22));
|
detail::packed10bitToFloat(v >> 22));
|
||||||
}
|
}
|
||||||
|
|
||||||
}//namespace glm
|
}//namespace glm
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <glm/gtc/packing.hpp>
|
#include <glm/gtc/packing.hpp>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
void print_bits(glm::half const & s)
|
void print_bits(glm::half const & s)
|
||||||
{
|
{
|
||||||
@ -132,6 +133,150 @@ int test_half()
|
|||||||
return Error;
|
return Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int test_Half1x16()
|
||||||
|
{
|
||||||
|
int Error = 0;
|
||||||
|
|
||||||
|
std::vector<float> Tests;
|
||||||
|
Tests.push_back(0.0f);
|
||||||
|
Tests.push_back(1.0f);
|
||||||
|
Tests.push_back(-1.0f);
|
||||||
|
Tests.push_back(2.0f);
|
||||||
|
Tests.push_back(-2.0f);
|
||||||
|
Tests.push_back(1.9f);
|
||||||
|
|
||||||
|
for(std::size_t i = 0; i < Tests.size(); ++i)
|
||||||
|
{
|
||||||
|
glm::uint32 p0 = glm::packHalf1x16(Tests[i]);
|
||||||
|
float v0 = glm::unpackHalf1x16(p0);
|
||||||
|
glm::uint32 p1 = glm::packHalf1x16(v0);
|
||||||
|
float v1 = glm::unpackHalf1x16(p0);
|
||||||
|
Error += (v0 == v1) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_Half4x16()
|
||||||
|
{
|
||||||
|
int Error = 0;
|
||||||
|
|
||||||
|
std::vector<glm::vec4> Tests;
|
||||||
|
Tests.push_back(glm::vec4(1.0));
|
||||||
|
Tests.push_back(glm::vec4(0.0));
|
||||||
|
Tests.push_back(glm::vec4(2.0));
|
||||||
|
Tests.push_back(glm::vec4(0.1));
|
||||||
|
Tests.push_back(glm::vec4(0.5));
|
||||||
|
Tests.push_back(glm::vec4(-0.9));
|
||||||
|
|
||||||
|
for(std::size_t i = 0; i < Tests.size(); ++i)
|
||||||
|
{
|
||||||
|
glm::uint64 p0 = glm::packHalf4x16(Tests[i]);
|
||||||
|
glm::vec4 v0 = glm::unpackHalf4x16(p0);
|
||||||
|
glm::uint64 p1 = glm::packHalf4x16(v0);
|
||||||
|
glm::vec4 v1 = glm::unpackHalf4x16(p0);
|
||||||
|
Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_I3x10_1x2()
|
||||||
|
{
|
||||||
|
int Error = 0;
|
||||||
|
|
||||||
|
std::vector<glm::ivec4> Tests;
|
||||||
|
Tests.push_back(glm::ivec4(0));
|
||||||
|
Tests.push_back(glm::ivec4(1));
|
||||||
|
Tests.push_back(glm::ivec4(-1));
|
||||||
|
Tests.push_back(glm::ivec4(2));
|
||||||
|
Tests.push_back(glm::ivec4(-2));
|
||||||
|
Tests.push_back(glm::ivec4(3));
|
||||||
|
|
||||||
|
for(std::size_t i = 0; i < Tests.size(); ++i)
|
||||||
|
{
|
||||||
|
glm::uint32 p0 = glm::packI3x10_1x2(Tests[i]);
|
||||||
|
glm::ivec4 v0 = glm::unpackI3x10_1x2(p0);
|
||||||
|
glm::uint32 p1 = glm::packI3x10_1x2(v0);
|
||||||
|
glm::ivec4 v1 = glm::unpackI3x10_1x2(p0);
|
||||||
|
Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_U3x10_1x2()
|
||||||
|
{
|
||||||
|
int Error = 0;
|
||||||
|
|
||||||
|
std::vector<glm::uvec4> Tests;
|
||||||
|
Tests.push_back(glm::uvec4(0));
|
||||||
|
Tests.push_back(glm::uvec4(1));
|
||||||
|
Tests.push_back(glm::uvec4(2));
|
||||||
|
Tests.push_back(glm::uvec4(3));
|
||||||
|
Tests.push_back(glm::uvec4(4));
|
||||||
|
Tests.push_back(glm::uvec4(5));
|
||||||
|
|
||||||
|
for(std::size_t i = 0; i < Tests.size(); ++i)
|
||||||
|
{
|
||||||
|
glm::uint32 p0 = glm::packU3x10_1x2(Tests[i]);
|
||||||
|
glm::uvec4 v0 = glm::unpackU3x10_1x2(p0);
|
||||||
|
glm::uint32 p1 = glm::packU3x10_1x2(v0);
|
||||||
|
glm::uvec4 v1 = glm::unpackU3x10_1x2(p0);
|
||||||
|
Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_Snorm3x10_1x2()
|
||||||
|
{
|
||||||
|
int Error = 0;
|
||||||
|
|
||||||
|
std::vector<glm::vec4> Tests;
|
||||||
|
Tests.push_back(glm::vec4(1.0));
|
||||||
|
Tests.push_back(glm::vec4(0.0));
|
||||||
|
Tests.push_back(glm::vec4(2.0));
|
||||||
|
Tests.push_back(glm::vec4(0.1));
|
||||||
|
Tests.push_back(glm::vec4(0.5));
|
||||||
|
Tests.push_back(glm::vec4(0.9));
|
||||||
|
|
||||||
|
for(std::size_t i = 0; i < Tests.size(); ++i)
|
||||||
|
{
|
||||||
|
glm::uint32 p0 = glm::packSnorm3x10_1x2(Tests[i]);
|
||||||
|
glm::vec4 v0 = glm::unpackSnorm3x10_1x2(p0);
|
||||||
|
glm::uint32 p1 = glm::packSnorm3x10_1x2(v0);
|
||||||
|
glm::vec4 v1 = glm::unpackSnorm3x10_1x2(p0);
|
||||||
|
Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_Unorm3x10_1x2()
|
||||||
|
{
|
||||||
|
int Error = 0;
|
||||||
|
|
||||||
|
std::vector<glm::vec4> Tests;
|
||||||
|
Tests.push_back(glm::vec4(1.0));
|
||||||
|
Tests.push_back(glm::vec4(0.0));
|
||||||
|
Tests.push_back(glm::vec4(2.0));
|
||||||
|
Tests.push_back(glm::vec4(0.1));
|
||||||
|
Tests.push_back(glm::vec4(0.5));
|
||||||
|
Tests.push_back(glm::vec4(0.9));
|
||||||
|
|
||||||
|
for(std::size_t i = 0; i < Tests.size(); ++i)
|
||||||
|
{
|
||||||
|
glm::uint32 p0 = glm::packSnorm3x10_1x2(Tests[i]);
|
||||||
|
glm::vec4 v0 = glm::unpackSnorm3x10_1x2(p0);
|
||||||
|
glm::uint32 p1 = glm::packSnorm3x10_1x2(v0);
|
||||||
|
glm::vec4 v1 = glm::unpackSnorm3x10_1x2(p0);
|
||||||
|
Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
|
||||||
int test_F2x11_1x10()
|
int test_F2x11_1x10()
|
||||||
{
|
{
|
||||||
int Error = 0;
|
int Error = 0;
|
||||||
@ -156,54 +301,6 @@ int test_F2x11_1x10()
|
|||||||
return Error;
|
return Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int test_Snorm3x10_1x2()
|
|
||||||
{
|
|
||||||
int Error = 0;
|
|
||||||
|
|
||||||
std::vector<glm::vec4> Tests;
|
|
||||||
Tests.push_back(glm::vec4(1.0));
|
|
||||||
Tests.push_back(glm::vec4(0.0));
|
|
||||||
Tests.push_back(glm::vec4(2.0));
|
|
||||||
Tests.push_back(glm::vec4(0.1));
|
|
||||||
Tests.push_back(glm::vec4(0.5));
|
|
||||||
Tests.push_back(glm::vec4(0.9));
|
|
||||||
|
|
||||||
for(std::size_t i = 0; i < Tests.size(); ++i)
|
|
||||||
{
|
|
||||||
glm::uint32 p0 = glm::packSnorm3x10_1x2(Tests[i]);
|
|
||||||
glm::vec3 v0 = glm::unpackSnorm3x10_1x2(p0);
|
|
||||||
glm::uint32 p1 = glm::packSnorm3x10_1x2(v0);
|
|
||||||
glm::vec3 v1 = glm::unpackSnorm3x10_1x2(p0);
|
|
||||||
Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Error;
|
|
||||||
}
|
|
||||||
|
|
||||||
int test_Unorm3x10_1x2()
|
|
||||||
{
|
|
||||||
int Error = 0;
|
|
||||||
|
|
||||||
std::vector<glm::vec4> Tests;
|
|
||||||
Tests.push_back(glm::vec4(1.0));
|
|
||||||
Tests.push_back(glm::vec4(0.0));
|
|
||||||
Tests.push_back(glm::vec4(2.0));
|
|
||||||
Tests.push_back(glm::vec4(0.1));
|
|
||||||
Tests.push_back(glm::vec4(0.5));
|
|
||||||
Tests.push_back(glm::vec4(0.9));
|
|
||||||
|
|
||||||
for(std::size_t i = 0; i < Tests.size(); ++i)
|
|
||||||
{
|
|
||||||
glm::uint32 p0 = glm::packSnorm3x10_1x2(Tests[i]);
|
|
||||||
glm::vec3 v0 = glm::unpackSnorm3x10_1x2(p0);
|
|
||||||
glm::uint32 p1 = glm::packSnorm3x10_1x2(v0);
|
|
||||||
glm::vec3 v1 = glm::unpackSnorm3x10_1x2(p0);
|
|
||||||
Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Error;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
int Error(0);
|
int Error(0);
|
||||||
|
Loading…
Reference in New Issue
Block a user