Merge pull request #3031 from rg3igalia/sub-group-size-arb-flat-fix
[platform/upstream/glslang.git] / Test / vk.relaxed.stagelink.0.0.frag
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 TDPhongResult\r
13 {\r
14         vec3 diffuse;\r
15         vec3 specular;\r
16         vec3 specular2;\r
17         float shadowStrength;\r
18 };\r
19 struct TDPBRResult\r
20 {\r
21         vec3 diffuse;\r
22         vec3 specular;\r
23         float shadowStrength;\r
24 };\r
25 struct TDMatrix\r
26 {\r
27         mat4 world;\r
28         mat4 worldInverse;\r
29         mat4 worldCam;\r
30         mat4 worldCamInverse;\r
31         mat4 cam;\r
32         mat4 camInverse;\r
33         mat4 camProj;\r
34         mat4 camProjInverse;\r
35         mat4 proj;\r
36         mat4 projInverse;\r
37         mat4 worldCamProj;\r
38         mat4 worldCamProjInverse;\r
39         mat4 quadReproject;\r
40         mat3 worldForNormals;\r
41         mat3 camForNormals;\r
42         mat3 worldCamForNormals;\r
43 };\r
44 layout(std140) uniform TDMatricesBlock {\r
45         TDMatrix uTDMats[TD_NUM_CAMERAS];\r
46 };\r
47 struct TDCameraInfo\r
48 {\r
49         vec4 nearFar;\r
50         vec4 fog;\r
51         vec4 fogColor;\r
52         int renderTOPCameraIndex;\r
53 };\r
54 layout(std140) uniform TDCameraInfoBlock {\r
55         TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS];\r
56 };\r
57 struct TDGeneral\r
58 {\r
59         vec4 ambientColor;\r
60         vec4 nearFar;\r
61         vec4 viewport;\r
62         vec4 viewportRes;\r
63         vec4 fog;\r
64         vec4 fogColor;\r
65 };\r
66 layout(std140) uniform TDGeneralBlock {\r
67         TDGeneral uTDGeneral;\r
68 };\r
69 \r
70 void TDAlphaTest(float alpha);\r
71 vec4 TDDither(vec4 color);\r
72 vec4 TDOutputSwizzle(vec4 v);\r
73 uvec4 TDOutputSwizzle(uvec4 v);\r
74 void TDCheckOrderIndTrans();\r
75 void TDCheckDiscard();\r
76 uniform vec3 uConstant;\r
77 uniform float uShadowStrength;\r
78 uniform vec3 uShadowColor;\r
79 uniform vec4 uDiffuseColor;\r
80 uniform vec4 uAmbientColor;\r
81 \r
82 uniform sampler2DArray sColorMap;\r
83 \r
84 in Vertex\r
85 {\r
86         vec4 color;\r
87         vec3 worldSpacePos;\r
88         vec3 texCoord0;\r
89         flat int cameraIndex;\r
90         flat int instance;\r
91 } iVert;\r
92 \r
93 // Output variable for the color\r
94 layout(location = 0) out vec4 oFragColor[TD_NUM_COLOR_BUFFERS];\r
95 void main()\r
96 {\r
97         // This allows things such as order independent transparency\r
98         // and Dual-Paraboloid rendering to work properly\r
99         TDCheckDiscard();\r
100 \r
101         vec4 outcol = vec4(0.0, 0.0, 0.0, 0.0);\r
102 \r
103         vec3 texCoord0 = iVert.texCoord0.stp;\r
104         float actualTexZ = mod(int(texCoord0.z),2048);\r
105         float instanceLoop = floor(int(texCoord0.z)/2048);\r
106         texCoord0.z = actualTexZ;\r
107         vec4 colorMapColor = texture(sColorMap, texCoord0.stp);\r
108 \r
109         float red = colorMapColor[int(instanceLoop)];\r
110         colorMapColor = vec4(red);\r
111         // Constant Light Contribution\r
112         outcol.rgb += uConstant * iVert.color.rgb;\r
113 \r
114         outcol *= colorMapColor;\r
115 \r
116         // Alpha Calculation\r
117         float alpha = iVert.color.a * colorMapColor.a ;\r
118 \r
119         // Dithering, does nothing if dithering is disabled\r
120         outcol = TDDither(outcol);\r
121 \r
122         outcol.rgb *= alpha;\r
123 \r
124         // Modern GL removed the implicit alpha test, so we need to apply\r
125         // it manually here. This function does nothing if alpha test is disabled.\r
126         TDAlphaTest(alpha);\r
127 \r
128         outcol.a = alpha;\r
129         oFragColor[0] = TDOutputSwizzle(outcol);\r
130 \r
131 \r
132         // TD_NUM_COLOR_BUFFERS will be set to the number of color buffers\r
133         // active in the render. By default we want to output zero to every\r
134         // buffer except the first one.\r
135         for (int i = 1; i < TD_NUM_COLOR_BUFFERS; i++)\r
136         {\r
137                 oFragColor[i] = vec4(0.0);\r
138         }\r
139 }\r