1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #ifndef SHADERS__COMMON__3D_DM_INPLANE_SAMPLING_COMMON_H
17 #define SHADERS__COMMON__3D_DM_INPLANE_SAMPLING_COMMON_H
18
19 /*
20 * Needs to be included after the descriptor sets are bound.
21 */
22
GetTransformedUV(const DefaultMaterialUnpackedTexTransformStruct texTransform,const vec2 uvInput)23 vec2 GetTransformedUV(const DefaultMaterialUnpackedTexTransformStruct texTransform, const vec2 uvInput)
24 {
25 vec2 uv;
26 uv.x = dot(texTransform.rotateScale.xy, uvInput);
27 uv.y = dot(texTransform.rotateScale.zw, uvInput);
28 uv += texTransform.translate.xy;
29 return uv;
30 }
31
32 // transform = high bits (16)
33 // uv set bit = low bits (0)
GetUnpackTexCoordInfo()34 uint GetUnpackTexCoordInfo()
35 {
36 return floatBitsToUint(uMaterialData.material[0].factors[CORE_MATERIAL_FACTOR_ADDITIONAL_IDX].y);
37 }
GetUnpackTexCoordInfo(uint instanceIdx)38 uint GetUnpackTexCoordInfo(uint instanceIdx)
39 {
40 return floatBitsToUint(uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_ADDITIONAL_IDX].y);
41 }
42
GetFinalSamplingUV(vec4 inputUv,uint texCoordInfoBit,uint texCoordIdx)43 vec2 GetFinalSamplingUV(vec4 inputUv, uint texCoordInfoBit, uint texCoordIdx)
44 {
45 const uint texCoordInfo = GetUnpackTexCoordInfo();
46 vec2 uv = (((texCoordInfo >> CORE_MATERIAL_TEXCOORD_INFO_SHIFT) & texCoordInfoBit) == texCoordInfoBit) ? inputUv.zw
47 : inputUv.xy;
48 const bool doTrans = (((texCoordInfo & 0xffff) & texCoordInfoBit) == texCoordInfoBit);
49 if (((CORE_MATERIAL_FLAGS & CORE_MATERIAL_TEXTURE_TRANSFORM_BIT) == CORE_MATERIAL_TEXTURE_TRANSFORM_BIT) &&
50 doTrans) {
51 DefaultMaterialUnpackedTexTransformStruct texTransform =
52 GetUnpackTextureTransform(uMaterialTransformData.material[0].packed[texCoordIdx]);
53 uv = GetTransformedUV(texTransform, uv);
54 }
55 return uv;
56 }
GetFinalSamplingUV(vec4 inputUv,uint texCoordInfoBit,uint texCoordIdx,uint instanceIdx)57 vec2 GetFinalSamplingUV(vec4 inputUv, uint texCoordInfoBit, uint texCoordIdx, uint instanceIdx)
58 {
59 const uint texCoordInfo = GetUnpackTexCoordInfo(instanceIdx);
60 vec2 uv = (((texCoordInfo >> CORE_MATERIAL_TEXCOORD_INFO_SHIFT) & texCoordInfoBit) == texCoordInfoBit) ? inputUv.zw
61 : inputUv.xy;
62 const bool doTrans = (((texCoordInfo & 0xffff) & texCoordInfoBit) == texCoordInfoBit);
63 if (((CORE_MATERIAL_FLAGS & CORE_MATERIAL_TEXTURE_TRANSFORM_BIT) == CORE_MATERIAL_TEXTURE_TRANSFORM_BIT) &&
64 doTrans) {
65 DefaultMaterialUnpackedTexTransformStruct texTransform =
66 GetUnpackTextureTransform(uMaterialTransformData.material[instanceIdx].packed[texCoordIdx]);
67 uv = GetTransformedUV(texTransform, uv);
68 }
69 return uv;
70 }
71
GetBaseColorSample(const vec4 uvInput)72 vec4 GetBaseColorSample(const vec4 uvInput)
73 {
74 const vec2 uv =
75 GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_BASE_BIT, CORE_MATERIAL_PACK_TEX_BASE_COLOR_UV_IDX);
76 return texture(uSampTextureBase, uv);
77 }
GetBaseColorSample(const vec4 uvInput,const uint instanceIdx)78 vec4 GetBaseColorSample(const vec4 uvInput, const uint instanceIdx)
79 {
80 const vec2 uv = GetFinalSamplingUV(
81 uvInput, CORE_MATERIAL_TEXCOORD_INFO_BASE_BIT, CORE_MATERIAL_PACK_TEX_BASE_COLOR_UV_IDX, instanceIdx);
82 return texture(uSampTextureBase, uv);
83 }
84
GetNormalSample(const vec4 uvInput)85 vec3 GetNormalSample(const vec4 uvInput)
86 {
87 const vec2 uv =
88 GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_NORMAL_BIT, CORE_MATERIAL_PACK_TEX_NORMAL_UV_IDX);
89 return texture(uSampTextures[CORE_MATERIAL_TEX_NORMAL_IDX], uv).xyz;
90 }
GetNormalSample(const vec4 uvInput,const uint instanceIdx)91 vec3 GetNormalSample(const vec4 uvInput, const uint instanceIdx)
92 {
93 const vec2 uv = GetFinalSamplingUV(
94 uvInput, CORE_MATERIAL_TEXCOORD_INFO_NORMAL_BIT, CORE_MATERIAL_PACK_TEX_NORMAL_UV_IDX, instanceIdx);
95 return texture(uSampTextures[CORE_MATERIAL_TEX_NORMAL_IDX], uv).xyz;
96 }
97
GetMaterialSample(const vec4 uvInput)98 vec4 GetMaterialSample(const vec4 uvInput)
99 {
100 const vec2 uv =
101 GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_MATERIAL_BIT, CORE_MATERIAL_PACK_TEX_MATERIAL_UV_IDX);
102 return texture(uSampTextures[CORE_MATERIAL_TEX_MATERIAL_IDX], uv);
103 }
GetMaterialSample(const vec4 uvInput,const uint instanceIdx)104 vec4 GetMaterialSample(const vec4 uvInput, const uint instanceIdx)
105 {
106 const vec2 uv = GetFinalSamplingUV(
107 uvInput, CORE_MATERIAL_TEXCOORD_INFO_MATERIAL_BIT, CORE_MATERIAL_PACK_TEX_MATERIAL_UV_IDX, instanceIdx);
108 return texture(uSampTextures[CORE_MATERIAL_TEX_MATERIAL_IDX], uv);
109 }
110
GetEmissiveSample(const vec4 uvInput)111 vec3 GetEmissiveSample(const vec4 uvInput)
112 {
113 const vec2 uv =
114 GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_EMISSIVE_BIT, CORE_MATERIAL_PACK_TEX_EMISSIVE_UV_IDX);
115 return texture(uSampTextures[CORE_MATERIAL_TEX_EMISSIVE_IDX], uv).xyz;
116 }
GetEmissiveSample(const vec4 uvInput,const uint instanceIdx)117 vec3 GetEmissiveSample(const vec4 uvInput, const uint instanceIdx)
118 {
119 const vec2 uv = GetFinalSamplingUV(
120 uvInput, CORE_MATERIAL_TEXCOORD_INFO_EMISSIVE_BIT, CORE_MATERIAL_PACK_TEX_EMISSIVE_UV_IDX, instanceIdx);
121 return texture(uSampTextures[CORE_MATERIAL_TEX_EMISSIVE_IDX], uv).xyz;
122 }
123
GetAOSample(const vec4 uvInput)124 float GetAOSample(const vec4 uvInput)
125 {
126 const vec2 uv = GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_AO_BIT, CORE_MATERIAL_PACK_TEX_AO_UV_IDX);
127 return texture(uSampTextures[CORE_MATERIAL_TEX_AO_IDX], uv).x;
128 }
GetAOSample(const vec4 uvInput,const uint instanceIdx)129 float GetAOSample(const vec4 uvInput, const uint instanceIdx)
130 {
131 const vec2 uv =
132 GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_AO_BIT, CORE_MATERIAL_PACK_TEX_AO_UV_IDX, instanceIdx);
133 return texture(uSampTextures[CORE_MATERIAL_TEX_AO_IDX], uv).x;
134 }
135
GetClearcoatSample(const vec4 uvInput)136 float GetClearcoatSample(const vec4 uvInput)
137 {
138 const vec2 uv =
139 GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_CLEARCOAT_BIT, CORE_MATERIAL_PACK_TEX_CLEARCOAT_UV_IDX);
140 return texture(uSampTextures[CORE_MATERIAL_TEX_CLEARCOAT_IDX], uv).x;
141 }
GetClearcoatSample(const vec4 uvInput,const uint instanceIdx)142 float GetClearcoatSample(const vec4 uvInput, const uint instanceIdx)
143 {
144 const vec2 uv = GetFinalSamplingUV(
145 uvInput, CORE_MATERIAL_TEXCOORD_INFO_CLEARCOAT_BIT, CORE_MATERIAL_PACK_TEX_CLEARCOAT_UV_IDX, instanceIdx);
146 return texture(uSampTextures[CORE_MATERIAL_TEX_CLEARCOAT_IDX], uv).x;
147 }
148
GetClearcoatRoughnessSample(const vec4 uvInput)149 float GetClearcoatRoughnessSample(const vec4 uvInput)
150 {
151 const vec2 uv = GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_CLEARCOAT_ROUGHNESS_BIT,
152 CORE_MATERIAL_PACK_TEX_CLEARCOAT_ROUGHNESS_UV_IDX);
153 return texture(uSampTextures[CORE_MATERIAL_TEX_CLEARCOAT_ROUGHNESS_IDX], uv).y;
154 }
GetClearcoatRoughnessSample(const vec4 uvInput,const uint instanceIdx)155 float GetClearcoatRoughnessSample(const vec4 uvInput, const uint instanceIdx)
156 {
157 const vec2 uv = GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_CLEARCOAT_ROUGHNESS_BIT,
158 CORE_MATERIAL_PACK_TEX_CLEARCOAT_ROUGHNESS_UV_IDX, instanceIdx);
159 return texture(uSampTextures[CORE_MATERIAL_TEX_CLEARCOAT_ROUGHNESS_IDX], uv).y;
160 }
161
GetClearcoatNormalSample(const vec4 uvInput)162 vec3 GetClearcoatNormalSample(const vec4 uvInput)
163 {
164 const vec2 uv = GetFinalSamplingUV(
165 uvInput, CORE_MATERIAL_TEXCOORD_INFO_CLEARCOAT_NORMAL_BIT, CORE_MATERIAL_PACK_TEX_CLEARCOAT_NORMAL_UV_IDX);
166 return texture(uSampTextures[CORE_MATERIAL_TEX_CLEARCOAT_NORMAL_IDX], uv).xyz;
167 }
GetClearcoatNormalSample(const vec4 uvInput,const uint instanceIdx)168 vec3 GetClearcoatNormalSample(const vec4 uvInput, const uint instanceIdx)
169 {
170 const vec2 uv = GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_CLEARCOAT_NORMAL_BIT,
171 CORE_MATERIAL_PACK_TEX_CLEARCOAT_NORMAL_UV_IDX, instanceIdx);
172 return texture(uSampTextures[CORE_MATERIAL_TEX_CLEARCOAT_NORMAL_IDX], uv).xyz;
173 }
174
GetSheenSample(const vec4 uvInput)175 vec3 GetSheenSample(const vec4 uvInput)
176 {
177 const vec2 uv =
178 GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_SHEEN_BIT, CORE_MATERIAL_PACK_TEX_SHEEN_UV_IDX);
179 return texture(uSampTextures[CORE_MATERIAL_TEX_SHEEN_IDX], uv).xyz;
180 }
GetSheenSample(const vec4 uvInput,const uint instanceIdx)181 vec3 GetSheenSample(const vec4 uvInput, const uint instanceIdx)
182 {
183 const vec2 uv = GetFinalSamplingUV(
184 uvInput, CORE_MATERIAL_TEXCOORD_INFO_SHEEN_BIT, CORE_MATERIAL_PACK_TEX_SHEEN_UV_IDX, instanceIdx);
185 return texture(uSampTextures[CORE_MATERIAL_TEX_SHEEN_IDX], uv).xyz;
186 }
187
188 // NOTE: from sheen alpha
GetSheenRoughnessSample(const vec4 uvInput)189 float GetSheenRoughnessSample(const vec4 uvInput)
190 {
191 const vec2 uv =
192 GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_SHEEN_BIT, CORE_MATERIAL_PACK_TEX_SHEEN_UV_IDX);
193 return texture(uSampTextures[CORE_MATERIAL_TEX_SHEEN_IDX], uv).a; // alpha
194 }
GetSheenRoughnessSample(const vec4 uvInput,const uint instanceIdx)195 float GetSheenRoughnessSample(const vec4 uvInput, const uint instanceIdx)
196 {
197 const vec2 uv = GetFinalSamplingUV(
198 uvInput, CORE_MATERIAL_TEXCOORD_INFO_SHEEN_BIT, CORE_MATERIAL_PACK_TEX_SHEEN_UV_IDX, instanceIdx);
199 return texture(uSampTextures[CORE_MATERIAL_TEX_SHEEN_IDX], uv).a; // alpha
200 }
201
GetTransmissionSample(const vec4 uvInput)202 float GetTransmissionSample(const vec4 uvInput)
203 {
204 const vec2 uv = GetFinalSamplingUV(
205 uvInput, CORE_MATERIAL_TEXCOORD_INFO_TRANSMISSION_BIT, CORE_MATERIAL_PACK_TEX_TRANSMISSION_UV_IDX);
206 return texture(uSampTextures[CORE_MATERIAL_TEX_TRANSMISSION_IDX], uv).r;
207 }
GetTransmissionSample(const vec4 uvInput,const uint instanceIdx)208 float GetTransmissionSample(const vec4 uvInput, const uint instanceIdx)
209 {
210 const vec2 uv = GetFinalSamplingUV(
211 uvInput, CORE_MATERIAL_TEXCOORD_INFO_TRANSMISSION_BIT, CORE_MATERIAL_PACK_TEX_TRANSMISSION_UV_IDX, instanceIdx);
212 return texture(uSampTextures[CORE_MATERIAL_TEX_TRANSMISSION_IDX], uv).r;
213 }
214
GetSpecularSample(const vec4 uvInput)215 vec4 GetSpecularSample(const vec4 uvInput)
216 {
217 const vec2 uv =
218 GetFinalSamplingUV(uvInput, CORE_MATERIAL_TEXCOORD_INFO_SPECULAR_BIT, CORE_MATERIAL_PACK_TEX_SPECULAR_UV_IDX);
219 return texture(uSampTextures[CORE_MATERIAL_TEX_SPECULAR_IDX], uv);
220 }
GetSpecularSample(const vec4 uvInput,const uint instanceIdx)221 vec4 GetSpecularSample(const vec4 uvInput, const uint instanceIdx)
222 {
223 const vec2 uv = GetFinalSamplingUV(
224 uvInput, CORE_MATERIAL_TEXCOORD_INFO_SPECULAR_BIT, CORE_MATERIAL_PACK_TEX_SPECULAR_UV_IDX, instanceIdx);
225 return texture(uSampTextures[CORE_MATERIAL_TEX_SPECULAR_IDX], uv);
226 }
227
228 /*
229 * Inplace sampling of material data, similar functions with ubo input in 3d_dm_structures_common.h
230 */
231
GetUnpackCameraIndex()232 uint GetUnpackCameraIndex()
233 {
234 return uGeneralData.indices.x;
235 }
236
GetUnpackViewport()237 vec4 GetUnpackViewport()
238 {
239 return uGeneralData.viewportSizeInvViewportSize;
240 }
241
GetUnpackBaseColor(const uint instanceIdx)242 vec4 GetUnpackBaseColor(const uint instanceIdx)
243 {
244 return uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_BASE_IDX];
245 }
246
GetUnpackMaterial(const uint instanceIdx)247 vec4 GetUnpackMaterial(const uint instanceIdx)
248 {
249 return uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_MATERIAL_IDX];
250 }
251
GetUnpackAO(const uint instanceIdx)252 float GetUnpackAO(const uint instanceIdx)
253 {
254 return uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_AO_IDX].x;
255 }
256
GetUnpackClearcoat(const uint instanceIdx)257 float GetUnpackClearcoat(const uint instanceIdx)
258 {
259 return uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_CLEARCOAT_IDX].x;
260 }
261
262 // NOTE: sampling from .y
GetUnpackClearcoatRoughness(const uint instanceIdx)263 float GetUnpackClearcoatRoughness(const uint instanceIdx)
264 {
265 return uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_CLEARCOAT_ROUGHNESS_IDX].y;
266 }
267
GetUnpackClearcoatNormalScale(const uint instanceIdx)268 float GetUnpackClearcoatNormalScale(const uint instanceIdx)
269 {
270 return uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_CLEARCOAT_NORMAL_IDX].x;
271 }
272
273 // .xyz = sheen factor, .w = sheen roughness
GetUnpackSheen(const uint instanceIdx)274 vec4 GetUnpackSheen(const uint instanceIdx)
275 {
276 return uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_SHEEN_IDX];
277 }
278
GetUnpackTransmission(const uint instanceIdx)279 float GetUnpackTransmission(const uint instanceIdx)
280 {
281 return uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_TRANSMISSION_IDX].x;
282 }
283
284 // .xyz = specular color, .w = specular strength
GetUnpackSpecular(const uint instanceIdx)285 vec4 GetUnpackSpecular(const uint instanceIdx)
286 {
287 return uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_SPECULAR_IDX];
288 }
289
GetUnpackEmissiveColor(const uint instanceIdx)290 vec3 GetUnpackEmissiveColor(const uint instanceIdx)
291 {
292 const vec4 emissive = uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_EMISSIVE_IDX];
293 return emissive.rgb * emissive.a;
294 }
295
GetUnpackNormalScale(const uint instanceIdx)296 float GetUnpackNormalScale(const uint instanceIdx)
297 {
298 return uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_NORMAL_IDX].x;
299 }
300
GetUnpackAlphaCutoff(const uint instanceIdx)301 float GetUnpackAlphaCutoff(const uint instanceIdx)
302 {
303 return uMaterialData.material[instanceIdx].factors[CORE_MATERIAL_FACTOR_ADDITIONAL_IDX].x;
304 }
305
GetUnpackMaterialTextureInfoSlotFactor(const uint materialIndexSlot,const uint instanceIdx)306 vec4 GetUnpackMaterialTextureInfoSlotFactor(const uint materialIndexSlot, const uint instanceIdx)
307 {
308 const uint maxIndex = min(materialIndexSlot, CORE_MATERIAL_FACTOR_UNIFORM_VEC4_COUNT - 1);
309 return uMaterialData.material[instanceIdx].factors[maxIndex].xyzw;
310 }
311
Unpremultiply(in vec4 color)312 vec4 Unpremultiply(in vec4 color)
313 {
314 if (color.a == 0.0) {
315 return vec4(0);
316 }
317 return vec4(color.rgb / color.a, color.a);
318 }
319
GetUnpackBaseColorFinalValue(in CORE_RELAXEDP vec4 color,in vec4 uv,in uint instanceIdx)320 CORE_RELAXEDP vec4 GetUnpackBaseColorFinalValue(in CORE_RELAXEDP vec4 color, in vec4 uv, in uint instanceIdx)
321 {
322 // NOTE: by the spec with blend mode opaque alpha should be 1.0 from this calculation
323 CORE_RELAXEDP vec4 baseColor = GetBaseColorSample(uv, instanceIdx) * GetUnpackBaseColor(instanceIdx) * color;
324 baseColor.a = clamp(baseColor.a, 0.0, 1.0);
325 if ((CORE_MATERIAL_FLAGS & CORE_MATERIAL_ADDITIONAL_SHADER_DISCARD_BIT) ==
326 CORE_MATERIAL_ADDITIONAL_SHADER_DISCARD_BIT) {
327 if (baseColor.a < GetUnpackAlphaCutoff(instanceIdx)) {
328 discard;
329 }
330 }
331 if ((CORE_MATERIAL_FLAGS & CORE_MATERIAL_OPAQUE_BIT) == CORE_MATERIAL_OPAQUE_BIT) {
332 baseColor.a = 1.0;
333 } else {
334 baseColor = Unpremultiply(baseColor);
335 }
336 return baseColor;
337 }
338
339 // DEPRECATED: use the one with cameraIdx
GetFinalCalculatedVelocity(in vec3 pos,in vec3 prevPos)340 vec2 GetFinalCalculatedVelocity(in vec3 pos, in vec3 prevPos)
341 {
342 // NOTE: velocity should be unjittered when reading (or calc without jitter)
343 // currently default cameras calculates the same jitter for both frames
344
345 const uint cameraIdx = GetUnpackCameraIndex();
346 const vec4 projPos = uCameras[cameraIdx].viewProj * vec4(pos.xyz, 1.0);
347 const vec4 projPosPrev = uCameras[cameraIdx].viewProjPrevFrame * vec4(prevPos.xyz, 1.0);
348
349 const vec2 uvPos = (projPos.xy / projPos.w) * 0.5 + 0.5;
350 const vec2 oldUvPos = (projPosPrev.xy / projPosPrev.w) * 0.5 + 0.5;
351 // better precision for fp16 and expected in parts of engine
352 return (uvPos - oldUvPos) * uGeneralData.viewportSizeInvViewportSize.xy;
353 }
354
GetFinalCalculatedVelocity(in vec3 pos,in vec3 prevPos,in uint cameraIdx)355 vec2 GetFinalCalculatedVelocity(in vec3 pos, in vec3 prevPos, in uint cameraIdx)
356 {
357 // NOTE: velocity should be unjittered when reading (or calc without jitter)
358 // currently default cameras calculates the same jitter for both frames
359
360 const vec4 projPos = uCameras[cameraIdx].viewProj * vec4(pos.xyz, 1.0);
361 const vec4 projPosPrev = uCameras[cameraIdx].viewProjPrevFrame * vec4(prevPos.xyz, 1.0);
362
363 const vec2 uvPos = (projPos.xy / projPos.w) * 0.5 + 0.5;
364 const vec2 oldUvPos = (projPosPrev.xy / projPosPrev.w) * 0.5 + 0.5;
365 // better precision for fp16 and expected in parts of engine
366 return (uvPos - oldUvPos) * uGeneralData.viewportSizeInvViewportSize.xy;
367 }
368 #endif // SHADERS__COMMON__3D_DM_INPLANE_SAMPLING_COMMON_H
369