Ok, donc je suis juste de commencer à utiliser C intrinsics dans mon code et j'ai créé une classe, qui a simplifié ressemble à ceci:utilisant C intrinsics et des difficultés d'alignement de mémoire avec les classes
class _Vector3D
{
public:
_Vector3D()
{
aVals[0] = _mm_setzero_ps();
aVals[1] = _mm_setzero_ps();
aVals[2] = _mm_setzero_ps();
}
~_Vector3D() {}
private:
__m128 aVals[3];
};
Jusqu'à présent, si bien . Mais quand je crée une deuxième classe avec les membres _Vector3D, je reçois des problèmes:
class RayPacket
{
public:
RayPacket() {orig = _Vector3D(); dir = _Vector3D(); power = _mm_setzero_ps();}
~RayPacket() {}
RayPacket(_Vector3D origins, _Vector3D directions, float pow)
{
orig = origins;
dir = directions;
power = _mm_set_ps1(pow);
}
_Vector3D orig;
_Vector3D dir;
__m128 power;
};
Je reçois l'erreur suivante:
erreur C2719: « origines »: paramètre formel avec __declspec (alignement ('16')) ne seront pas alignés
montrant la surcharge du constructeur:
RayPacket(_Vector3D origins, _Vector3D directions, float pow)
Alors je vais sur ce dans le mauvais sens? Dois-je utiliser des structures à la place ou puis-je le faire fonctionner avec des classes?
Pourquoi passez-vous soudainement à flotter de __m128? – Bill
Problèmes avec vos identifiants. Les identfiers commençant par underscore suivis d'une lettre capitale et les identifiants contenant deux underscores consécutifs sont réservés par l'implémentation. Les utiliser entraînera des problèmes sur la route. –
Juste pour noter - vous semblez avoir un petit malentendu sur SSE. Vous appelez '_Vector3D' ce qui devrait être une matrice ** 3x4 **. chacun des __m128 est un ensemble de 4 flotteurs. – LiraNuna