1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
#ifndef _HLSL_DEFINITIONS_
#define _HLSL_DEFINITIONS_
#define HLSL
#define NDC_MIN_Z 0.0 // Minimal z in the normalized device space
#define F3NDC_XYZ_TO_UVD_SCALE float3(0.5, -0.5, 1.0)
float2 NormalizedDeviceXYToTexUV( float2 f2ProjSpaceXY )
{
return float2(0.5,0.5) + float2(0.5,-0.5) * f2ProjSpaceXY.xy;
}
float2 TexUVToNormalizedDeviceXY( float2 TexUV)
{
return (TexUV.xy - float2(0.5, 0.5)) * float2(2.0, -2.0);
}
float NormalizedDeviceZToDepth(float fNDC_Z)
{
return fNDC_Z;
}
float DepthToNormalizedDeviceZ(float fDepth)
{
return fDepth;
}
// Relational and logical operators
#define Less(x,y) ((x)<(y))
#define LessEqual(x,y) ((x)<=(y))
#define Greater(x,y) ((x)>(y))
#define GreaterEqual(x,y) ((x)>=(y))
#define Equal(x,y) ((x)==(y))
#define NotEqual(x,y) ((x)!=(y))
#define Not(x) (!(x))
#define And(x,y) ((x)&&(y))
#define Or(x,y) ((x)||(y))
float4 BoolToFloat( bool4 b4 )
{
return float4(b4.x ? 1.0 : 0.0,
b4.y ? 1.0 : 0.0,
b4.z ? 1.0 : 0.0,
b4.w ? 1.0 : 0.0);
}
float3 BoolToFloat( bool3 b3 )
{
return float3(b3.x ? 1.0 : 0.0,
b3.y ? 1.0 : 0.0,
b3.z ? 1.0 : 0.0);
}
float2 BoolToFloat( bool2 b2 )
{
return float2(b2.x ? 1.0 : 0.0,
b2.y ? 1.0 : 0.0);
}
float BoolToFloat( bool b )
{
return b.x ? 1.0 : 0.0;
}
#define MATRIX_ELEMENT(mat, row, col) mat[row][col]
float4x4 MatrixFromRows(float4 row0, float4 row1, float4 row2, float4 row3)
{
return float4x4(row0, row1, row2, row3);
}
float3x3 MatrixFromRows(float3 row0, float3 row1, float3 row2)
{
return float3x3(row0, row1, row2);
}
float2x2 MatrixFromRows(float2 row0, float2 row1)
{
return float2x2(row0, row1);
}
#endif // _HLSL_DEFINITIONS_
|