summaryrefslogtreecommitdiffstats
path: root/shaders_inc/BasicStructures.fxh.h
blob: cd3799c7f3a16f1e942ba9847bdf57038527f563 (plain)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
"#ifndef _BASIC_STRUCTURES_FXH_\n"
"#define _BASIC_STRUCTURES_FXH_\n"
"\n"
"\n"
"#ifdef __cplusplus\n"
"\n"
"#   ifndef BOOL\n"
"#      define BOOL int32_t // Do not use bool, because sizeof(bool)==1 !\n"
"#   endif\n"
"\n"
"#   ifndef CHECK_STRUCT_ALIGNMENT\n"
"        // Note that defining empty macros causes GL shader compilation error on Mac, because\n"
"        // it does not allow standalone semicolons outside of main.\n"
"        // On the other hand, adding semicolon at the end of the macro definition causes gcc error.\n"
"#       define CHECK_STRUCT_ALIGNMENT(s) static_assert( sizeof(s) % 16 == 0, \"sizeof(\" #s \") is not multiple of 16\" )\n"
"#   endif\n"
"\n"
"#   ifndef DEFAULT_VALUE\n"
"#       define DEFAULT_VALUE(x) =x\n"
"#   endif\n"
"\n"
"#else\n"
"\n"
"#   ifndef BOOL\n"
"#       define BOOL bool\n"
"#   endif\n"
"\n"
"#   ifndef DEFAULT_VALUE\n"
"#       define DEFAULT_VALUE(x)\n"
"#   endif\n"
"\n"
"#endif\n"
"\n"
"\n"
"struct CascadeAttribs\n"
"{\n"
"	float4 f4LightSpaceScale;\n"
"	float4 f4LightSpaceScaledBias;\n"
"    float4 f4StartEndZ;\n"
"\n"
"    // Cascade margin in light projection space ([-1, +1] x [-1, +1] x [-1(GL) or 0, +1])\n"
"    float4 f4MarginProjSpace;\n"
"};\n"
"#ifdef CHECK_STRUCT_ALIGNMENT\n"
"    CHECK_STRUCT_ALIGNMENT(CascadeAttribs);\n"
"#endif\n"
"\n"
"#define SHADOW_MODE_PCF 1\n"
"#define SHADOW_MODE_VSM 2\n"
"#define SHADOW_MODE_EVSM2 3\n"
"#define SHADOW_MODE_EVSM4 4\n"
"#ifndef SHADOW_MODE\n"
"#   define SHADOW_MODE SHADOW_MODE_PCF\n"
"#endif\n"
"\n"
"#define MAX_CASCADES 8\n"
"struct ShadowMapAttribs\n"
"{\n"
"    // 0\n"
"#ifdef __cplusplus\n"
"    float4x4 mWorldToLightViewT; // Matrices in HLSL are COLUMN-major while float4x4 is ROW major\n"
"#else\n"
"    matrix mWorldToLightView;  // Transform from view space to light projection space\n"
"#endif\n"
"    // 16\n"
"    CascadeAttribs Cascades[MAX_CASCADES];\n"
"\n"
"#ifdef __cplusplus\n"
"    float4x4 mWorldToShadowMapUVDepthT[MAX_CASCADES];\n"
"    float fCascadeCamSpaceZEnd[MAX_CASCADES];\n"
"#else\n"
"    matrix mWorldToShadowMapUVDepth[MAX_CASCADES];\n"
"    float4 f4CascadeCamSpaceZEnd[MAX_CASCADES/4];\n"
"#endif\n"
"\n"
"    float4 f4ShadowMapDim;    // Width, Height, 1/Width, 1/Height\n"
"\n"
"    // Number of shadow cascades\n"
"    int   iNumCascades                  DEFAULT_VALUE(0);\n"
"    float fNumCascades                  DEFAULT_VALUE(0);\n"
"    // Do not use bool, because sizeof(bool)==1 !\n"
"	BOOL  bVisualizeCascades            DEFAULT_VALUE(0);\n"
"    BOOL  bVisualizeShadowing           DEFAULT_VALUE(0);\n"
"\n"
"    float fReceiverPlaneDepthBiasClamp  DEFAULT_VALUE(10);\n"
"    float fFixedDepthBias               DEFAULT_VALUE(1e-5f);\n"
"    float fCascadeTransitionRegion      DEFAULT_VALUE(0.1f);\n"
"    int   iMaxAnisotropy                DEFAULT_VALUE(4);\n"
"\n"
"    float fVSMBias                      DEFAULT_VALUE(1e-4f);\n"
"    float fVSMLightBleedingReduction    DEFAULT_VALUE(0);\n"
"    float fEVSMPositiveExponent         DEFAULT_VALUE(40);\n"
"    float fEVSMNegativeExponent         DEFAULT_VALUE(5);\n"
"\n"
"    BOOL  bIs32BitEVSM                  DEFAULT_VALUE(1);\n"
"    int   iFixedFilterSize              DEFAULT_VALUE(3); // 3x3 filter\n"
"    float fFilterWorldSize              DEFAULT_VALUE(0);\n"
"    bool  fDummy;\n"
"};\n"
"#ifdef CHECK_STRUCT_ALIGNMENT\n"
"    CHECK_STRUCT_ALIGNMENT(ShadowMapAttribs);\n"
"#endif\n"
"\n"
"struct LightAttribs\n"
"{\n"
"    float4 f4Direction      DEFAULT_VALUE(float4(0, 0,-1, 0));\n"
"    float4 f4AmbientLight   DEFAULT_VALUE(float4(0, 0, 0, 0));\n"
"    float4 f4Intensity      DEFAULT_VALUE(float4(1, 1, 1, 1));\n"
"\n"
"    ShadowMapAttribs ShadowAttribs;\n"
"};\n"
"#ifdef CHECK_STRUCT_ALIGNMENT\n"
"    CHECK_STRUCT_ALIGNMENT(LightAttribs);\n"
"#endif\n"
"\n"
"struct CameraAttribs\n"
"{\n"
"    float4 f4Position;     // Camera world position\n"
"    float4 f4ViewportSize; // (width, height, 1/width, 1/height)\n"
"\n"
"    float2 f2ViewportOrigin; // (min x, min y)\n"
"    float fNearPlaneZ; \n"
"    float fFarPlaneZ; // fNearPlaneZ < fFarPlaneZ\n"
"\n"
"#ifdef __cplusplus\n"
"    float4x4 mViewT;\n"
"    float4x4 mProjT;\n"
"    float4x4 mViewProjT;\n"
"    float4x4 mViewInvT;\n"
"    float4x4 mProjInvT;\n"
"    float4x4 mViewProjInvT;\n"
"#else\n"
"    matrix mView;\n"
"    matrix mProj;\n"
"    matrix mViewProj;\n"
"    matrix mViewInv;\n"
"    matrix mProjInv;\n"
"    matrix mViewProjInv;\n"
"#endif\n"
"\n"
"    float4 f4ExtraData[5]; // Any appliation-specific data\n"
"    // Sizeof(CameraAttribs) == 256*2\n"
"};\n"
"#ifdef CHECK_STRUCT_ALIGNMENT\n"
"    CHECK_STRUCT_ALIGNMENT(CameraAttribs);\n"
"#endif\n"
"\n"
"#endif //_BASIC_STRUCTURES_FXH_\n"