Merge pull request #3031 from rg3igalia/sub-group-size-arb-flat-fix
[platform/upstream/glslang.git] / Test / vk.relaxed.stagelink.0.2.vert
1 #version 460\r
2 uniform int uTDInstanceIDOffset;\r
3 uniform int uTDNumInstances;\r
4 uniform float uTDAlphaTestVal;\r
5 #define TD_NUM_COLOR_BUFFERS 1\r
6 #define TD_NUM_LIGHTS 0\r
7 #define TD_NUM_SHADOWED_LIGHTS 0\r
8 #define TD_NUM_ENV_LIGHTS 0\r
9 #define TD_LIGHTS_ARRAY_SIZE 1\r
10 #define TD_ENV_LIGHTS_ARRAY_SIZE 1\r
11 #define TD_NUM_CAMERAS 1\r
12 struct TDLight\r
13 {\r
14         vec4 position;\r
15         vec3 direction;\r
16         vec3 diffuse;\r
17         vec4 nearFar;\r
18         vec4 lightSize;\r
19         vec4 misc;\r
20         vec4 coneLookupScaleBias;\r
21         vec4 attenScaleBiasRoll;\r
22         mat4 shadowMapMatrix;\r
23         mat4 shadowMapCamMatrix;\r
24         vec4 shadowMapRes;\r
25         mat4 projMapMatrix;\r
26 };\r
27 struct TDEnvLight\r
28 {\r
29         vec3 color;\r
30         mat3 rotate;\r
31 };\r
32 layout(std140) uniform TDLightBlock\r
33 {\r
34         TDLight uTDLights[TD_LIGHTS_ARRAY_SIZE];\r
35 };\r
36 layout(std140) uniform TDEnvLightBlock\r
37 {\r
38         TDEnvLight      uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE];\r
39 };\r
40 layout(std430) readonly restrict buffer TDEnvLightBuffer\r
41 {\r
42         vec3 shCoeffs[9];\r
43 } uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE];\r
44 struct TDPhongResult\r
45 {\r
46         vec3 diffuse;\r
47         vec3 specular;\r
48         vec3 specular2;\r
49         float shadowStrength;\r
50 };\r
51 struct TDPBRResult\r
52 {\r
53         vec3 diffuse;\r
54         vec3 specular;\r
55         float shadowStrength;\r
56 };\r
57 struct TDMatrix\r
58 {\r
59         mat4 world;\r
60         mat4 worldInverse;\r
61         mat4 worldCam;\r
62         mat4 worldCamInverse;\r
63         mat4 cam;\r
64         mat4 camInverse;\r
65         mat4 camProj;\r
66         mat4 camProjInverse;\r
67         mat4 proj;\r
68         mat4 projInverse;\r
69         mat4 worldCamProj;\r
70         mat4 worldCamProjInverse;\r
71         mat4 quadReproject;\r
72         mat3 worldForNormals;\r
73         mat3 camForNormals;\r
74         mat3 worldCamForNormals;\r
75 };\r
76 layout(std140) uniform TDMatricesBlock {\r
77         TDMatrix uTDMats[TD_NUM_CAMERAS];\r
78 };\r
79 struct TDCameraInfo\r
80 {\r
81         vec4 nearFar;\r
82         vec4 fog;\r
83         vec4 fogColor;\r
84         int renderTOPCameraIndex;\r
85 };\r
86 layout(std140) uniform TDCameraInfoBlock {\r
87         TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS];\r
88 };\r
89 struct TDGeneral\r
90 {\r
91         vec4 ambientColor;\r
92         vec4 nearFar;\r
93         vec4 viewport;\r
94         vec4 viewportRes;\r
95         vec4 fog;\r
96         vec4 fogColor;\r
97 };\r
98 layout(std140) uniform TDGeneralBlock {\r
99         TDGeneral uTDGeneral;\r
100 };\r
101 \r
102 layout(binding = 15) uniform samplerBuffer sTDInstanceT;\r
103 layout(binding = 16) uniform samplerBuffer sTDInstanceTexCoord;\r
104 layout(binding = 17) uniform samplerBuffer sTDInstanceColor;\r
105 #define TD_NUM_BONES 0\r
106 vec4 TDWorldToProj(vec4 v);\r
107 vec4 TDWorldToProj(vec3 v);\r
108 vec4 TDWorldToProj(vec4 v, vec3 uv);\r
109 vec4 TDWorldToProj(vec3 v, vec3 uv);\r
110 int TDPickID();\r
111 int TDInstanceID();\r
112 int TDCameraIndex();\r
113 vec3 TDUVUnwrapCoord();\r
114 vec3 TDInstanceTexCoord(int index, vec3 t) {\r
115         vec3 v;\r
116         int coord = index;\r
117         vec4 samp = texelFetch(sTDInstanceTexCoord, coord);\r
118         v[0] = t.s;\r
119         v[1] = t.t;\r
120         v[2] = samp[0];\r
121     t.stp = v.stp;\r
122         return t;\r
123 }\r
124 bool TDInstanceActive(int index) {\r
125         index -= uTDInstanceIDOffset;\r
126         float v;\r
127         int coord = index;\r
128         vec4 samp = texelFetch(sTDInstanceT, coord);\r
129         v = samp[0];\r
130         return v != 0.0;\r
131 }\r
132 vec3 iTDInstanceTranslate(int index, out bool instanceActive) {\r
133         int origIndex = index;\r
134         index -= uTDInstanceIDOffset;\r
135         vec3 v;\r
136         int coord = index;\r
137         vec4 samp = texelFetch(sTDInstanceT, coord);\r
138         v[0] = samp[1];\r
139         v[1] = samp[2];\r
140         v[2] = samp[3];\r
141         instanceActive = samp[0] != 0.0;\r
142         return v;\r
143 }\r
144 vec3 TDInstanceTranslate(int index) {\r
145         index -= uTDInstanceIDOffset;\r
146         vec3 v;\r
147         int coord = index;\r
148         vec4 samp = texelFetch(sTDInstanceT, coord);\r
149         v[0] = samp[1];\r
150         v[1] = samp[2];\r
151         v[2] = samp[3];\r
152         return v;\r
153 }\r
154 mat3 TDInstanceRotateMat(int index) {\r
155         index -= uTDInstanceIDOffset;\r
156         vec3 v = vec3(0.0, 0.0, 0.0);\r
157         mat3 m = mat3(1.0);\r
158 {\r
159         mat3 r;\r
160 }\r
161         return m;\r
162 }\r
163 vec3 TDInstanceScale(int index) {\r
164         index -= uTDInstanceIDOffset;\r
165         vec3 v = vec3(1.0, 1.0, 1.0);\r
166         return v;\r
167 }\r
168 vec3 TDInstancePivot(int index) {\r
169         index -= uTDInstanceIDOffset;\r
170         vec3 v = vec3(0.0, 0.0, 0.0);\r
171         return v;\r
172 }\r
173 vec3 TDInstanceRotTo(int index) {\r
174         index -= uTDInstanceIDOffset;\r
175         vec3 v = vec3(0.0, 0.0, 1.0);\r
176         return v;\r
177 }\r
178 vec3 TDInstanceRotUp(int index) {\r
179         index -= uTDInstanceIDOffset;\r
180         vec3 v = vec3(0.0, 1.0, 0.0);\r
181         return v;\r
182 }\r
183 mat4 TDInstanceMat(int id) {\r
184         bool instanceActive = true;\r
185         vec3 t = iTDInstanceTranslate(id, instanceActive);\r
186         if (!instanceActive)\r
187         {\r
188                 return mat4(0.0);\r
189         }\r
190         mat4 m = mat4(1.0);\r
191         {\r
192                 vec3 tt = t;\r
193                 m[3][0] += m[0][0]*tt.x;\r
194                 m[3][1] += m[0][1]*tt.x;\r
195                 m[3][2] += m[0][2]*tt.x;\r
196                 m[3][3] += m[0][3]*tt.x;\r
197                 m[3][0] += m[1][0]*tt.y;\r
198                 m[3][1] += m[1][1]*tt.y;\r
199                 m[3][2] += m[1][2]*tt.y;\r
200                 m[3][3] += m[1][3]*tt.y;\r
201                 m[3][0] += m[2][0]*tt.z;\r
202                 m[3][1] += m[2][1]*tt.z;\r
203                 m[3][2] += m[2][2]*tt.z;\r
204                 m[3][3] += m[2][3]*tt.z;\r
205         }\r
206         return m;\r
207 }\r
208 mat3 TDInstanceMat3(int id) {\r
209         mat3 m = mat3(1.0);\r
210         return m;\r
211 }\r
212 mat3 TDInstanceMat3ForNorm(int id) {\r
213         mat3 m = TDInstanceMat3(id);\r
214         return m;\r
215 }\r
216 vec4 TDInstanceColor(int index, vec4 curColor) {\r
217         index -= uTDInstanceIDOffset;\r
218         vec4 v;\r
219         int coord = index;\r
220         vec4 samp = texelFetch(sTDInstanceColor, coord);\r
221         v[0] = samp[0];\r
222         v[1] = samp[1];\r
223         v[2] = samp[2];\r
224         v[3] = 1.0;\r
225         curColor[0] = v[0];\r
226 ;\r
227         curColor[1] = v[1];\r
228 ;\r
229         curColor[2] = v[2];\r
230 ;\r
231         return curColor;\r
232 }\r
233 vec4 TDInstanceDeform(int id, vec4 pos) {\r
234         pos = TDInstanceMat(id) * pos;\r
235         return uTDMats[TDCameraIndex()].world * pos;\r
236 }\r
237 \r
238 vec3 TDInstanceDeformVec(int id, vec3 vec)\r
239 {\r
240         mat3 m = TDInstanceMat3(id);\r
241         return mat3(uTDMats[TDCameraIndex()].world) * (m * vec);\r
242 }\r
243 vec3 TDInstanceDeformNorm(int id, vec3 vec)\r
244 {\r
245         mat3 m = TDInstanceMat3ForNorm(id);\r
246         return mat3(uTDMats[TDCameraIndex()].worldForNormals) * (m * vec);\r
247 }\r
248 vec4 TDInstanceDeform(vec4 pos) {\r
249         return TDInstanceDeform(TDInstanceID(), pos);\r
250 }\r
251 vec3 TDInstanceDeformVec(vec3 vec) {\r
252         return TDInstanceDeformVec(TDInstanceID(), vec);\r
253 }\r
254 vec3 TDInstanceDeformNorm(vec3 vec) {\r
255         return TDInstanceDeformNorm(TDInstanceID(), vec);\r
256 }\r
257 bool TDInstanceActive() { return TDInstanceActive(TDInstanceID()); }\r
258 vec3 TDInstanceTranslate() { return TDInstanceTranslate(TDInstanceID()); }\r
259 mat3 TDInstanceRotateMat() { return TDInstanceRotateMat(TDInstanceID()); }\r
260 vec3 TDInstanceScale() { return TDInstanceScale(TDInstanceID()); }\r
261 mat4 TDInstanceMat() { return TDInstanceMat(TDInstanceID());\r
262  }\r
263 mat3 TDInstanceMat3() { return TDInstanceMat3(TDInstanceID());\r
264 }\r
265 vec3 TDInstanceTexCoord(vec3 t) {\r
266         return TDInstanceTexCoord(TDInstanceID(), t);\r
267 }\r
268 vec4 TDInstanceColor(vec4 curColor) {\r
269         return TDInstanceColor(TDInstanceID(), curColor);\r
270 }\r
271 vec4 TDSkinnedDeform(vec4 pos) { return pos; }\r
272 \r
273 vec3 TDSkinnedDeformVec(vec3 vec) { return vec; }\r
274 \r
275 vec3 TDFastDeformTangent(vec3 oldNorm, vec4 oldTangent, vec3 deformedNorm)\r
276 {   return oldTangent.xyz;   }\r
277 mat4 TDBoneMat(int index) {\r
278    return mat4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);\r
279 }\r
280 vec4 TDDeform(vec4 pos) {\r
281     pos = TDSkinnedDeform(pos);\r
282     pos = TDInstanceDeform(pos);\r
283     return pos;\r
284 }\r
285 \r
286 vec4 TDDeform(int instanceID, vec3 p) {\r
287         vec4 pos = vec4(p, 1.0);\r
288     pos = TDSkinnedDeform(pos);\r
289     pos = TDInstanceDeform(instanceID, pos);\r
290     return pos;\r
291 }\r
292 \r
293 vec4 TDDeform(vec3 pos) {\r
294         return TDDeform(TDInstanceID(), pos);\r
295 }\r
296 \r
297 vec3 TDDeformVec(int instanceID, vec3 vec) {\r
298     vec = TDSkinnedDeformVec(vec);\r
299     vec = TDInstanceDeformVec(instanceID, vec);\r
300     return vec;\r
301 }\r
302 \r
303 vec3 TDDeformVec(vec3 vec) {\r
304         return TDDeformVec(TDInstanceID(), vec);\r
305 }\r
306 \r
307 vec3 TDDeformNorm(int instanceID, vec3 vec) {\r
308     vec = TDSkinnedDeformVec(vec);\r
309     vec = TDInstanceDeformNorm(instanceID, vec);\r
310     return vec;\r
311 }\r
312 \r
313 vec3 TDDeformNorm(vec3 vec) {\r
314         return TDDeformNorm(TDInstanceID(), vec);\r
315 }\r
316 \r
317 vec3 TDSkinnedDeformNorm(vec3 vec) {\r
318     vec = TDSkinnedDeformVec(vec);\r
319         return vec;\r
320 }\r