295 lines
9.4 KiB
HLSL
295 lines
9.4 KiB
HLSL
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
// This header defines the "worldspace vector" FWSVector alias type and its related types
|
|
// The underlying implementation can be either tile-offset (LWC*) or double float (DF*)
|
|
|
|
// Changes made to either branch must be applied to the other as well
|
|
|
|
#include "/Engine/Private/DoubleFloat.ush"
|
|
#include "/Engine/Private/LargeWorldCoordinates.ush"
|
|
|
|
#if WSVECTOR_IS_TILEOFFSET
|
|
|
|
|
|
#define FWSScalar FLWCScalar
|
|
#define FWSVector2 FLWCVector2
|
|
#define FWSVector3 FLWCVector3
|
|
#define FWSVector4 FLWCVector4
|
|
|
|
#define FWSScalarDeriv FLWCScalarDeriv
|
|
#define FWSVector2Deriv FLWCVector2Deriv
|
|
#define FWSVector3Deriv FLWCVector3Deriv
|
|
#define FWSVector4Deriv FLWCVector4Deriv
|
|
#define FWSMatrix FLWCMatrix
|
|
#define FWSInverseMatrix FLWCInverseMatrix
|
|
|
|
#define MakeWSScalar MakeLWCScalar
|
|
#define MakeWSVector2 MakeLWCVector2
|
|
#define MakeWSVector3 MakeLWCVector3
|
|
#define MakeWSVector4 MakeLWCVector4
|
|
#define MakeWSVector MakeLWCVector
|
|
#define MakeWSMatrix MakeLWCMatrix
|
|
#define MakeWSMatrix4x3 MakeLWCMatrix4x3
|
|
#define MakeWSInverseMatrix MakeLWCInverseMatrix
|
|
#define MakeWSInverseMatrix4x3 MakeLWCInverseMatrix4x3
|
|
|
|
FWSScalar LWCToWS(FLWCScalar In) { return In; }
|
|
FWSScalar DFToWS(FDFScalar In) { return DFToTileOffset(In); }
|
|
FWSScalar DFFastToWS(FDFScalar In) { return DFFastToTileOffset(In); }
|
|
FLWCScalar WSToLWC(FWSScalar In) { return In; }
|
|
FDFScalar WSToDF(FWSScalar In) { return DFFromTileOffset(In); }
|
|
|
|
FWSVector2 LWCToWS(FLWCVector2 In) { return In; }
|
|
FWSVector2 DFToWS(FDFVector2 In) { return DFToTileOffset(In); }
|
|
FWSVector2 DFFastToWS(FDFVector2 In) { return DFFastToTileOffset(In); }
|
|
FLWCVector2 WSToLWC(FWSVector2 In) { return In; }
|
|
FDFVector2 WSToDF(FWSVector2 In) { return DFFromTileOffset(In); }
|
|
|
|
FWSVector3 LWCToWS(FLWCVector3 In) { return In; }
|
|
FWSVector3 DFToWS(FDFVector3 In) { return DFToTileOffset(In); }
|
|
FWSVector3 DFFastToWS(FDFVector3 In) { return DFFastToTileOffset(In); }
|
|
FLWCVector3 WSToLWC(FWSVector3 In) { return In; }
|
|
FDFVector3 WSToDF(FWSVector3 In) { return DFFromTileOffset(In); }
|
|
|
|
FWSVector4 LWCToWS(FLWCVector4 In) { return In; }
|
|
FWSVector4 DFToWS(FDFVector4 In) { return DFToTileOffset(In); }
|
|
FWSVector4 DFFastToWS(FDFVector4 In) { return DFFastToTileOffset(In); }
|
|
FLWCVector4 WSToLWC(FWSVector4 In) { return In; }
|
|
FDFVector4 WSToDF(FWSVector4 In) { return DFFromTileOffset(In); }
|
|
|
|
FWSMatrix LWCToWS(FLWCMatrix In) { return In; }
|
|
FWSMatrix DFToWS(FDFMatrix In) { return DFToTileOffset(In); }
|
|
FWSMatrix DFFastToWS(FDFMatrix In) { return DFFastToTileOffset(In); }
|
|
FLWCMatrix WSToLWC(FWSMatrix In) { return In; }
|
|
FDFMatrix WSToDF(FWSMatrix In) { return DFFromTileOffset(In); }
|
|
|
|
FWSInverseMatrix LWCToWS(FLWCInverseMatrix In) { return In; }
|
|
FWSInverseMatrix DFToWS(FDFInverseMatrix In) { return DFToTileOffset(In); }
|
|
FWSInverseMatrix DFFastToWS(FDFInverseMatrix In) { return DFFastToTileOffset(In); }
|
|
FLWCInverseMatrix WSToLWC(FWSInverseMatrix In) { return In; }
|
|
FDFInverseMatrix WSToDF(FWSInverseMatrix In) { return DFFromTileOffset(In); }
|
|
|
|
#define WSGetComponent LWCGetComponent
|
|
#define WSGetX LWCGetX
|
|
#define WSGetY LWCGetY
|
|
#define WSGetZ LWCGetZ
|
|
#define WSGetW LWCGetW
|
|
#define WSSwizzle LWCSwizzle
|
|
#define WSDemote LWCToFloat
|
|
#define WSToFloat3x3 LWCToFloat3x3
|
|
#define WSPromote LWCPromote
|
|
#define WSPromoteInverse LWCPromoteInverse
|
|
#define WSMultiply LWCMultiply
|
|
#define WSMultiplyByPow2 LWCMultiply
|
|
#define WSMultiplyDemote LWCMultiply
|
|
#define WSMultiplyVector LWCMultiplyVector
|
|
#define WSMultiplyTranslation LWCMultiplyTranslation
|
|
#define WSGetOrigin LWCGetOrigin
|
|
#define WSSetOrigin LWCSetOrigin
|
|
|
|
#define WSSqrtDemote LWCSqrt
|
|
#define WSRsqrtDemote LWCRsqrt
|
|
#define WSRcpDemote LWCRcp
|
|
|
|
#define WSGreater LWCGreater
|
|
#define WSGreaterEqual LWCGreaterEqual
|
|
#define WSLess LWCLess
|
|
#define WSLessEqual LWCLessEqual
|
|
#define WSEquals LWCEquals
|
|
#define WSEqualsApprox LWCEqualsApprox
|
|
|
|
#define WSDdxDemote LWCDdx
|
|
#define WSDdyDemote LWCDdy
|
|
|
|
#define WSAdd LWCAdd
|
|
#define WSAddDemote(A, B) LWCToFloat(LWCAdd(A, B))
|
|
#define WSSubtract LWCSubtract
|
|
#define WSSubtractDemote(A, B) LWCToFloat(LWCSubtract(A, B))
|
|
|
|
#define WSSelect LWCSelect
|
|
#define WSNegate LWCNegate
|
|
#define WSFracDemote LWCFrac
|
|
#define WSFloor LWCFloor
|
|
#define WSCeil LWCCeil
|
|
#define WSRound LWCRound
|
|
#define WSTrunc LWCTrunc
|
|
#define WSSign LWCSign
|
|
#define WSSaturateDemote LWCSaturate
|
|
#define WSDivide LWCDivide
|
|
#define WSDivideByPow2 LWCDivide
|
|
#define WSLerp LWCLerp
|
|
#define WSFmodDemote LWCFmod
|
|
#define WSModuloDemote LWCModulo
|
|
|
|
#define WSSin LWCSin
|
|
#define WSCos LWCCos
|
|
#define WSTan LWCTan
|
|
#define WSASin LWCASin
|
|
#define WSACos LWCACos
|
|
#define WSATan LWCATan
|
|
|
|
#define WSSmoothStepDemote LWCSmoothStep
|
|
|
|
#define WSMin LWCMin
|
|
#define WSMax LWCMax
|
|
#define WSAbs LWCAbs
|
|
#define WSStep LWCStep
|
|
|
|
#define WSVectorSum LWCVectorSum
|
|
#define WSDot LWCDot
|
|
#define WSLength LWCLength
|
|
#define WSRcpLengthDemote LWCRcpLength
|
|
#define WSNormalizeDemote LWCNormalize
|
|
|
|
|
|
#elif WSVECTOR_IS_DOUBLEFLOAT
|
|
|
|
|
|
#define FWSScalar FDFScalar
|
|
#define FWSVector2 FDFVector2
|
|
#define FWSVector3 FDFVector3
|
|
#define FWSVector4 FDFVector4
|
|
|
|
#define FWSScalarDeriv FDFScalarDeriv
|
|
#define FWSVector2Deriv FDFVector2Deriv
|
|
#define FWSVector3Deriv FDFVector3Deriv
|
|
#define FWSVector4Deriv FDFVector4Deriv
|
|
#define FWSMatrix FDFMatrix
|
|
#define FWSInverseMatrix FDFInverseMatrix
|
|
|
|
#define MakeWSScalar MakeDFScalar
|
|
#define MakeWSVector2 MakeDFVector2
|
|
#define MakeWSVector3 MakeDFVector3
|
|
#define MakeWSVector4 MakeDFVector4
|
|
#define MakeWSVector MakeDFVector
|
|
#define MakeWSMatrix MakeDFMatrix
|
|
#define MakeWSMatrix4x3 MakeDFMatrix4x3
|
|
#define MakeWSInverseMatrix MakeDFInverseMatrix
|
|
#define MakeWSInverseMatrix4x3 MakeDFInverseMatrix4x3
|
|
|
|
FWSScalar LWCToWS(FLWCScalar In) { return DFFromTileOffset(In); }
|
|
FWSScalar DFToWS(FDFScalar In) { return In; }
|
|
FWSScalar DFFastToWS(FDFScalar In) { return In; }
|
|
FLWCScalar WSToLWC(FWSScalar In) { return DFToTileOffset(In); }
|
|
FDFScalar WSToDF(FWSScalar In) { return In; }
|
|
|
|
FWSVector2 LWCToWS(FLWCVector2 In) { return DFFromTileOffset(In); }
|
|
FWSVector2 DFToWS(FDFVector2 In) { return In; }
|
|
FWSVector2 DFFastToWS(FDFVector2 In) { return In; }
|
|
FLWCVector2 WSToLWC(FWSVector2 In) { return DFToTileOffset(In); }
|
|
FDFVector2 WSToDF(FWSVector2 In) { return In; }
|
|
|
|
FWSVector3 LWCToWS(FLWCVector3 In) { return DFFromTileOffset(In); }
|
|
FWSVector3 DFToWS(FDFVector3 In) { return In; }
|
|
FWSVector3 DFFastToWS(FDFVector3 In) { return In; }
|
|
FLWCVector3 WSToLWC(FWSVector3 In) { return DFToTileOffset(In); }
|
|
FDFVector3 WSToDF(FWSVector3 In) { return In; }
|
|
|
|
FWSVector4 LWCToWS(FLWCVector4 In) { return DFFromTileOffset(In); }
|
|
FWSVector4 DFToWS(FDFVector4 In) { return In; }
|
|
FWSVector4 DFFastToWS(FDFVector4 In) { return In; }
|
|
FLWCVector4 WSToLWC(FWSVector4 In) { return DFToTileOffset(In); }
|
|
FDFVector4 WSToDF(FWSVector4 In) { return In; }
|
|
|
|
FWSMatrix LWCToWS(FLWCMatrix In) { return DFFromTileOffset(In); }
|
|
FWSMatrix DFToWS(FDFMatrix In) { return In; }
|
|
FWSMatrix DFFastToWS(FDFMatrix In) { return In; }
|
|
FLWCMatrix WSToLWC(FWSMatrix In) { return DFToTileOffset(In); }
|
|
FDFMatrix WSToDF(FWSMatrix In) { return In; }
|
|
|
|
FWSInverseMatrix LWCToWS(FLWCInverseMatrix In) { return DFFromTileOffset(In); }
|
|
FWSInverseMatrix DFToWS(FDFInverseMatrix In) { return In; }
|
|
FWSInverseMatrix DFFastToWS(FDFInverseMatrix In) { return In; }
|
|
FLWCInverseMatrix WSToLWC(FWSInverseMatrix In) { return DFToTileOffset(In); }
|
|
FDFInverseMatrix WSToDF(FWSInverseMatrix In) { return In; }
|
|
|
|
#define WSGetComponent DFGetComponent
|
|
#define WSGetX DFGetX
|
|
#define WSGetY DFGetY
|
|
#define WSGetZ DFGetZ
|
|
#define WSGetW DFGetW
|
|
#define WSSwizzle DFSwizzle
|
|
#define WSDemote DFDemote
|
|
#define WSToFloat3x3 DFToFloat3x3
|
|
#define WSPromote DFPromote
|
|
#define WSPromoteInverse DFPromoteInverse
|
|
#define WSMultiply DFMultiply
|
|
#define WSMultiplyByPow2 DFMultiplyByPow2
|
|
#define WSMultiplyDemote DFMultiplyDemote
|
|
#define WSMultiplyVector DFMultiplyVector
|
|
#define WSMultiplyTranslation DFMultiplyTranslation
|
|
#define WSGetOrigin DFGetOrigin
|
|
#define WSSetOrigin DFSetOrigin
|
|
|
|
#define WSSqrtDemote DFSqrtDemote
|
|
#define WSRsqrtDemote DFRsqrtDemote
|
|
#define WSRcpDemote DFRcpDemote
|
|
|
|
#define WSGreater DFGreater
|
|
#define WSGreaterEqual DFGreaterEqual
|
|
#define WSLess DFLess
|
|
#define WSLessEqual DFLessEqual
|
|
#define WSEquals DFEquals
|
|
#define WSEqualsApprox DFEqualsApprox
|
|
|
|
#define WSDdxDemote DFDdxDemote
|
|
#define WSDdyDemote DFDdyDemote
|
|
|
|
#define WSAdd DFFastAdd
|
|
#define WSAddDemote DFFastAddDemote
|
|
#define WSSubtract DFFastSubtract
|
|
#define WSSubtractDemote(A, B) DFFastSubtractDemote(A, B)
|
|
|
|
#define WSSelect DFSelect
|
|
#define WSNegate DFNegate
|
|
#define WSFracDemote DFFracDemote
|
|
#define WSFloor DFFloor
|
|
#define WSCeil DFCeil
|
|
#define WSRound DFRound
|
|
#define WSTrunc DFTrunc
|
|
#define WSSign DFSign
|
|
#define WSSaturateDemote DFSaturateDemote
|
|
#define WSDivide DFFastDivide
|
|
#define WSDivideByPow2 DFDivideByPow2
|
|
#define WSLerp DFLerp
|
|
#define WSFmodDemote DFFmodDemote
|
|
#define WSModuloDemote DFModuloDemote
|
|
|
|
#define WSSin DFSin
|
|
#define WSCos DFCos
|
|
#define WSTan DFTan
|
|
#define WSASin DFASin
|
|
#define WSACos DFACos
|
|
#define WSATan DFATan
|
|
|
|
#define WSSmoothStepDemote DFSmoothStepDemote
|
|
|
|
#define WSMin DFMin
|
|
#define WSMax DFMax
|
|
#define WSAbs DFAbs
|
|
#define WSStep DFStep
|
|
|
|
#define WSVectorSum DFVectorSum
|
|
#define WSDot DFDot
|
|
#define WSLength DFLength
|
|
#define WSRcpLengthDemote DFRcpLengthDemote
|
|
#define WSNormalizeDemote DFNormalizeDemote
|
|
|
|
|
|
#endif
|
|
|
|
#define WSHackToFloat WSDemote
|
|
|
|
#define DEFINE_FP32_NOPS(FFloatType) \
|
|
FFloatType LWCToWS(FFloatType In) { return In; } \
|
|
FFloatType DFToWS(FFloatType In) { return In; } \
|
|
FFloatType WSToLWC(FFloatType In) { return In; } \
|
|
FFloatType WSToDF(FFloatType In) { return In; }
|
|
|
|
DEFINE_FP32_NOPS(float)
|
|
DEFINE_FP32_NOPS(float2)
|
|
DEFINE_FP32_NOPS(float3)
|
|
DEFINE_FP32_NOPS(float4)
|
|
|
|
#undef DEFINE_FP32_NOPS
|