constexpr simd vec: fix more runtime issues

This commit is contained in:
sharkautarch 2024-09-11 14:25:21 -04:00
parent f0b305ce43
commit d950f21404
No known key found for this signature in database
GPG Key ID: F270CA9462164405
3 changed files with 12 additions and 8 deletions

View File

@ -3,8 +3,10 @@
namespace glm::detail
{
consteval bool NotEmpty(length_t I, length_t L) { return I <= L; }
template <bool IsEmpty, typename T, length_t I, length_t L>
struct Element
template <bool IsNotEmpty, typename T, length_t I, length_t L>
struct Element;
template <typename T, length_t I, length_t L> requires (!NotEmpty(I, L))
struct Element<false, T, I, L>
{
constexpr operator auto() {
return 0;

View File

@ -189,17 +189,18 @@ namespace glm
// -- Data --
#define GLM_N [[no_unique_address]]
#define GLM_MA __attribute__((__may_alias__))
template <length_t I>
using E = detail::Element<detail::NotEmpty(I,L),T,I,L>;
union
{
struct {
GLM_MA struct {
union { T x, r, s; };
GLM_N union { GLM_N E<2> y; GLM_N E<2> g; GLM_N E<2> t; };
GLM_N union { GLM_N E<3> z; GLM_N E<3> b; GLM_N E<3> p; };
GLM_N union { GLM_N E<4> w; GLM_N E<4> a; GLM_N E<4> q; };
union { GLM_N E<2> y GLM_MA; GLM_N E<2> g; GLM_N E<2> t; };
union { GLM_N E<3> z GLM_MA; GLM_N E<3> b; GLM_N E<3> p; };
union { GLM_N E<4> w GLM_MA; GLM_N E<4> a; GLM_N E<4> q; };
};
data_t data;
GLM_MA data_t data;
};
#undef GLM_N
# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR

View File

@ -31,7 +31,8 @@ int main()
v1.x;
avec4 vfin = glm::max(v1, v2) + v3;
static_assert(sizeof(vfin)>0);
double w = v3.w;
printf("vfin = %f %f %f %f\n", vfin[0], vfin[1], vfin[2], vfin[3]);
printf("v3 = %f %f %f %f\n", v3[0], v3[1], v3[2], v3[3]);
printf("v3 = %f %f %f %f\n", v3[0], v3[1], v3.y, w);
return 0;
}