浏览代码

Update the template macros to only support integers and floats

/main
Evgenii Golubev 7 年前
当前提交
b1513a17
共有 2 个文件被更改,包括 35 次插入37 次删除
  1. 18
      ScriptableRenderPipeline/Core/ShaderLibrary/Common.hlsl
  2. 54
      ScriptableRenderPipeline/Core/ShaderLibrary/Macros.hlsl

18
ScriptableRenderPipeline/Core/ShaderLibrary/Common.hlsl


#ifndef INTRINSIC_WAVEREADFIRSTLANE
// Warning: for correctness, the argument must have the same value across the wave!
TEMPLATE_1(WaveReadFirstLane, scalarValue, return scalarValue)
TEMPLATE_1_FLT(WaveReadFirstLane, scalarValue, return scalarValue)
TEMPLATE_1_INT(WaveReadFirstLane, scalarValue, return scalarValue)
TEMPLATE_2(Mul24, a, b, return a * b)
TEMPLATE_2_INT(Mul24, a, b, return a * b)
TEMPLATE_3(Mad24, a, b, c, return a * b + c)
TEMPLATE_3_INT(Mad24, a, b, c, return a * b + c)
TEMPLATE_3(Min3, a, b, c, return min(min(a, b), c))
TEMPLATE_3(Max3, a, b, c, return max(max(a, b), c))
TEMPLATE_3_FLT(Min3, a, b, c, return min(min(a, b), c))
TEMPLATE_3_INT(Min3, a, b, c, return min(min(a, b), c))
TEMPLATE_3_FLT(Max3, a, b, c, return max(max(a, b), c))
TEMPLATE_3_INT(Max3, a, b, c, return max(max(a, b), c))
#endif // INTRINSIC_MINMAX3
void Swap(inout float a, inout float b)

}
// Square functions for cleaner code
TEMPLATE_1(Sqr, x, return x * x)
TEMPLATE_1_FLT(Sqr, x, return x * x)
TEMPLATE_1_INT(Sqr, x, return x * x)
// Input [0, 1] and output [0, PI/2]
// 9 VALU

// Using pow often result to a warning like this
// "pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them"
// PositivePow remove this warning when you know the value is positive and avoid inf/NAN.
TEMPLATE_2(PositivePow, base, power, return pow(max(abs(base), FLT_EPSILON), power))
TEMPLATE_2_FLT(PositivePow, base, power, return pow(max(abs(base), FLT_EPSILON), power))
// Ref: https://twitter.com/SebAaltonen/status/878250919879639040
// 2 mads (mad_sat and mad), faster than regular sign

54
ScriptableRenderPipeline/Core/ShaderLibrary/Macros.hlsl


#define SAMPLE_TEXTURECUBE_ARRAY_LOD_ABSTRACT(textureName, samplerName, coord3, index, lod) SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod)
#endif
#define TEMPLATE_1(FunctionName, Parameter1, FunctionBody) \
#define TEMPLATE_1_FLT(FunctionName, Parameter1, FunctionBody) \
float FunctionName(float Parameter1) { FunctionBody; } \
float2 FunctionName(float2 Parameter1) { FunctionBody; } \
float3 FunctionName(float3 Parameter1) { FunctionBody; } \
float4 FunctionName(float4 Parameter1) { FunctionBody; }
#define TEMPLATE_1_INT(FunctionName, Parameter1, FunctionBody) \
int FunctionName(int Parameter1) { FunctionBody; } \
int2 FunctionName(int2 Parameter1) { FunctionBody; } \
int3 FunctionName(int3 Parameter1) { FunctionBody; } \

uint3 FunctionName(uint3 Parameter1) { FunctionBody; } \
uint4 FunctionName(uint4 Parameter1) { FunctionBody; } \
float FunctionName(float Parameter1) { FunctionBody; } \
float2 FunctionName(float2 Parameter1) { FunctionBody; } \
float3 FunctionName(float3 Parameter1) { FunctionBody; } \
float4 FunctionName(float4 Parameter1) { FunctionBody; } \
bool FunctionName(bool Parameter1) { FunctionBody; } \
bool2 FunctionName(bool2 Parameter1) { FunctionBody; } \
bool3 FunctionName(bool3 Parameter1) { FunctionBody; } \
bool4 FunctionName(bool4 Parameter1) { FunctionBody; }
uint4 FunctionName(uint4 Parameter1) { FunctionBody; }
#define TEMPLATE_2_FLT(FunctionName, Parameter1, Parameter2, FunctionBody) \
float FunctionName(float Parameter1, float Parameter2) { FunctionBody; } \
float2 FunctionName(float2 Parameter1, float2 Parameter2) { FunctionBody; } \
float3 FunctionName(float3 Parameter1, float3 Parameter2) { FunctionBody; } \
float4 FunctionName(float4 Parameter1, float4 Parameter2) { FunctionBody; }
#define TEMPLATE_2(FunctionName, Parameter1, Parameter2, FunctionBody) \
#define TEMPLATE_2_INT(FunctionName, Parameter1, Parameter2, FunctionBody) \
int FunctionName(int Parameter1, int Parameter2) { FunctionBody; } \
int2 FunctionName(int2 Parameter1, int2 Parameter2) { FunctionBody; } \
int3 FunctionName(int3 Parameter1, int3 Parameter2) { FunctionBody; } \

uint3 FunctionName(uint3 Parameter1, uint3 Parameter2) { FunctionBody; } \
uint4 FunctionName(uint4 Parameter1, uint4 Parameter2) { FunctionBody; } \
float FunctionName(float Parameter1, float Parameter2) { FunctionBody; } \
float2 FunctionName(float2 Parameter1, float2 Parameter2) { FunctionBody; } \
float3 FunctionName(float3 Parameter1, float3 Parameter2) { FunctionBody; } \
float4 FunctionName(float4 Parameter1, float4 Parameter2) { FunctionBody; } \
bool FunctionName(bool Parameter1, bool Parameter2) { FunctionBody; } \
bool2 FunctionName(bool2 Parameter1, bool2 Parameter2) { FunctionBody; } \
bool3 FunctionName(bool3 Parameter1, bool3 Parameter2) { FunctionBody; } \
bool4 FunctionName(bool4 Parameter1, bool4 Parameter2) { FunctionBody; }
uint4 FunctionName(uint4 Parameter1, uint4 Parameter2) { FunctionBody; }
#define TEMPLATE_3_FLT(FunctionName, Parameter1, Parameter2, Parameter3, FunctionBody) \
float FunctionName(float Parameter1, float Parameter2, float Parameter3) { FunctionBody; } \
float2 FunctionName(float2 Parameter1, float2 Parameter2, float2 Parameter3) { FunctionBody; } \
float3 FunctionName(float3 Parameter1, float3 Parameter2, float3 Parameter3) { FunctionBody; } \
float4 FunctionName(float4 Parameter1, float4 Parameter2, float4 Parameter3) { FunctionBody; }
#define TEMPLATE_3(FunctionName, Parameter1, Parameter2, Parameter3, FunctionBody) \
#define TEMPLATE_3_INT(FunctionName, Parameter1, Parameter2, Parameter3, FunctionBody) \
int FunctionName(int Parameter1, int Parameter2, int Parameter3) { FunctionBody; } \
int2 FunctionName(int2 Parameter1, int2 Parameter2, int2 Parameter3) { FunctionBody; } \
int3 FunctionName(int3 Parameter1, int3 Parameter2, int3 Parameter3) { FunctionBody; } \

uint3 FunctionName(uint3 Parameter1, uint3 Parameter2, uint3 Parameter3) { FunctionBody; } \
uint4 FunctionName(uint4 Parameter1, uint4 Parameter2, uint4 Parameter3) { FunctionBody; } \
float FunctionName(float Parameter1, float Parameter2, float Parameter3) { FunctionBody; } \
float2 FunctionName(float2 Parameter1, float2 Parameter2, float2 Parameter3) { FunctionBody; } \
float3 FunctionName(float3 Parameter1, float3 Parameter2, float3 Parameter3) { FunctionBody; } \
float4 FunctionName(float4 Parameter1, float4 Parameter2, float4 Parameter3) { FunctionBody; } \
bool FunctionName(bool Parameter1, bool Parameter2, bool Parameter3) { FunctionBody; } \
bool2 FunctionName(bool2 Parameter1, bool2 Parameter2, bool2 Parameter3) { FunctionBody; } \
bool3 FunctionName(bool3 Parameter1, bool3 Parameter2, bool3 Parameter3) { FunctionBody; } \
bool4 FunctionName(bool4 Parameter1, bool4 Parameter2, bool4 Parameter3) { FunctionBody; }
uint4 FunctionName(uint4 Parameter1, uint4 Parameter2, uint4 Parameter3) { FunctionBody; }
#endif // UNITY_MACROS_INCLUDED
正在加载...
取消
保存