UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ScalarRegister.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
8
14//Currently disabled because FBoneAtom became FTransform and we want to iterate quickly on it.
15#ifndef ENABLE_VECTORIZED_TRANSFORM
16#define ENABLE_VECTORIZED_TRANSFORM PLATFORM_ENABLE_VECTORINTRINSICS
17#endif
18
19#if ENABLE_VECTORIZED_TRANSFORM
20
28{
29public:
30 using RegisterType = VectorRegister4Float;
31
32 RegisterType Value;
33
36
39
42
48
57
66
74 inline ScalarRegister& operator+=(const ScalarRegister& RHS);
75
83 inline ScalarRegister& operator-=(const ScalarRegister& RHS);
84
93
94
99 inline ScalarRegister& operator=(const ScalarRegister& RHS);
100
105 inline ScalarRegister& operator=(const RegisterType& RHS);
106
110 UE_FORCEINLINE_HINT operator RegisterType() const;
111};
112
113UE_FORCEINLINE_HINT ScalarRegister::ScalarRegister()
114{
115}
116
117UE_FORCEINLINE_HINT ScalarRegister::ScalarRegister(const ScalarRegister& VectorValue)
118{
119 Value = VectorValue.Value;
120}
121
122UE_FORCEINLINE_HINT ScalarRegister::ScalarRegister(const float& ScalarValue)
123{
125}
126
127UE_FORCEINLINE_HINT ScalarRegister::ScalarRegister(RegisterType VectorValue)
128{
130}
131
132UE_FORCEINLINE_HINT ScalarRegister ScalarRegister::operator*(const ScalarRegister& RHS) const
133{
134 return ScalarRegister(VectorMultiply(Value, RHS.Value));
135}
136
137UE_FORCEINLINE_HINT ScalarRegister ScalarRegister::operator+(const ScalarRegister& RHS) const
138{
139 return ScalarRegister(VectorAdd(Value, RHS.Value));
140}
141
142inline ScalarRegister& ScalarRegister::operator+=(const ScalarRegister& RHS)
143{
144 Value = VectorAdd(Value, RHS.Value);
145 return *this;
146}
147
148inline ScalarRegister& ScalarRegister::operator-=(const ScalarRegister& RHS)
149{
150 Value = VectorSubtract(Value, RHS.Value);
151 return *this;
152}
153
154UE_FORCEINLINE_HINT ScalarRegister ScalarRegister::operator-(const ScalarRegister& RHS) const
155{
156 return ScalarRegister(VectorSubtract(Value, RHS.Value));
157}
158
159
160inline ScalarRegister& ScalarRegister::operator=(const ScalarRegister& RHS)
161{
162 Value = RHS.Value;
163 return *this;
164}
165
166inline ScalarRegister& ScalarRegister::operator=(const RegisterType& RHS)
167{
168 Value = RHS;
169 return *this;
170}
171
172UE_FORCEINLINE_HINT ScalarRegister::operator RegisterType() const
173{
174 return Value;
175}
176
177#define ScalarOne (ScalarRegister)ScalarRegister(VectorOne())
178#define ScalarZero (ScalarRegister)ScalarRegister(VectorZero())
179
180/*----------------------------------------------------------------------------
181 ScalarRegister specialization of templates.
182----------------------------------------------------------------------------*/
183
186{
187 return ScalarRegister(VectorMin(A.Value, B.Value));
188}
189
192{
193 return ScalarRegister(VectorMax(A.Value, B.Value));
194}
195
196// TCustomLerp for FMath::Lerp()
197template<> struct TCustomLerp<ScalarRegister>
198{
199 constexpr static bool Value = true;
200
201 // Specialization of Lerp template that works with scalar (float in vector) registers
203 {
204 const ScalarRegister::RegisterType Delta = VectorSubtract(B.Value, A.Value);
205 return ScalarRegister(VectorMultiplyAdd(Alpha.Value, Delta, A.Value));
206 }
207};
208
216{
218}
219
226#define NonZeroAnimWeight(A) VectorAnyGreaterThan(A.Value, GlobalVectorConstants::AnimWeightThreshold)
227
228
235#define NonOneAnimWeight(A) !VectorAnyGreaterThan(A.Value, VectorSubtract(VectorOne(), GlobalVectorConstants::AnimWeightThreshold))
236
237#else
238
239#define ScalarRegister float
240
241#define ScalarOne 1.0f
242#define ScalarZero 0.0f
243
244#define ScalarMin Min
245#define ScalarMax Max
246
247#define ScalarReciprocal(A) (1.0f / (A))
248
249#define NonZeroAnimWeight(A) ((A) > ZERO_ANIMWEIGHT_THRESH)
250#define NonOneAnimWeight(A) ((A) < 1.0f - ZERO_ANIMWEIGHT_THRESH)
251
252#endif
UE_FORCEINLINE_HINT FLinearColor operator*(float Scalar, const FLinearColor &Color)
Definition Color.h:473
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr EIOSEventType operator+(EIOSEventType type, int Index)
Definition IOSInputInterface.cpp:138
#define ScalarMax
Definition ScalarRegister.h:245
#define ScalarRegister
Definition ScalarRegister.h:239
#define ScalarReciprocal(A)
Definition ScalarRegister.h:247
#define ScalarMin
Definition ScalarRegister.h:244
FScreenTransform operator-(const FScreenTransform &AToB, const FVector2f &Bias)
Definition ScreenPass.inl:264
FStringBuilderBase & operator+=(FStringBuilderBase &Builder, ANSICHAR Char)
Definition StringBuilder.h:582
FORCEINLINE VectorRegister4Float VectorSubtract(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:731
FORCEINLINE VectorRegister4Float VectorMin(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:1686
FORCEINLINE VectorRegister4Float VectorMultiply(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:758
FORCEINLINE VectorRegister4Float VectorMax(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:1713
FORCEINLINE VectorRegister4Float VectorLoadFloat1(const float *Ptr)
Definition UnrealMathFPU.h:468
FORCEINLINE VectorRegister4Float VectorMultiplyAdd(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2, const VectorRegister4Float &Vec3)
Definition UnrealMathFPU.h:786
FORCEINLINE VectorRegister4Float VectorAdd(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
Definition UnrealMathFPU.h:704
FORCEINLINE VectorRegister4Float VectorReciprocalAccurate(VectorRegister4Float Vec)
Definition UnrealMathVectorCommon.h.inl:391
Definition UnrealMathUtility.h:261
static constexpr bool Value
Definition UnrealMathUtility.h:262
Definition UnrealMathFPU.h:20