Proper SSE structure for OverlayBox_t::Transforms

This commit is contained in:
Kawe Mazidjatari 2022-07-12 12:28:23 +02:00
parent d47eaf98a0
commit 521cbad760
2 changed files with 17 additions and 12 deletions

View File

@ -247,6 +247,8 @@ void DrawAIScriptNodes()
#ifndef CLIENT_DLL
if (*g_pAINetwork)
{
OverlayBox_t::Transforms vTransforms;
for (int i = ai_script_nodes_draw_index->GetInt(); i < (*g_pAINetwork)->GetNumScriptNodes(); i++)
{
if (i < 0)
@ -254,12 +256,9 @@ void DrawAIScriptNodes()
return;
}
OverlayBox_t::Transforms vTransforms{}; /*!FIXME: using '__m128' without type cast shifts the stack with 0x10 despite being the same size!*/
__m128* pTransforms = reinterpret_cast<__m128*>(&vTransforms.u0);
pTransforms[0] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.x - 50.f, 0.0f, 0.0f, 1.0f);
pTransforms[1] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.y - 50.f, 0.0f, 1.0f, 0.0f);
pTransforms[2] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.z - 50.f, 1.0f, 0.0f, 0.0f);
vTransforms.xmm[0] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.x - 50.f, 0.0f, 0.0f, 1.0f);
vTransforms.xmm[1] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.y - 50.f, 0.0f, 1.0f, 0.0f);
vTransforms.xmm[2] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.z - 50.f, 1.0f, 0.0f, 0.0f);
v_RenderBox(vTransforms, {0, 0, 0}, {100, 100, 100}, Color(0, 255, 0, 255), r_debug_overlay_zbuffer->GetBool());

View File

@ -1,6 +1,7 @@
#pragma once
#include "mathlib/vector.h"
#include "mathlib/color.h"
#include "mathlib/vector4d.h"
// Something has to be hardcoded..
#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1) || defined (GAMEDLL_S2)
@ -73,12 +74,17 @@ struct OverlayBox_t : public OverlayBase_t
struct Transforms
{
Vector3D u0;
float x;
Vector3D u1;
float y;
Vector3D u2;
float z;
Transforms()
{
xmm[0] = _mm_setzero_ps();
xmm[1] = _mm_setzero_ps();
xmm[2] = _mm_setzero_ps();
};
union
{
__m128 xmm[3];
Vector4D vec[3];
};
};
Transforms transforms;