ef247e75ec
Opt-in to using the extension to support gl_InstanceIndex.
95 lines
2.7 KiB
GLSL
95 lines
2.7 KiB
GLSL
#version 310 es
|
|
#ifdef GL_ARB_shader_draw_parameters
|
|
#extension GL_ARB_shader_draw_parameters : enable
|
|
#endif
|
|
|
|
struct PatchData
|
|
{
|
|
vec4 Position;
|
|
vec4 LODs;
|
|
};
|
|
|
|
layout(binding = 0, std140) uniform PerPatch
|
|
{
|
|
PatchData Patches[256];
|
|
} _53;
|
|
|
|
layout(binding = 2, std140) uniform GlobalGround
|
|
{
|
|
vec4 GroundScale;
|
|
vec4 GroundPosition;
|
|
vec4 InvGroundSize_PatchScale;
|
|
} _156;
|
|
|
|
layout(binding = 0, std140) uniform GlobalVSData
|
|
{
|
|
vec4 g_ViewProj_Row0;
|
|
vec4 g_ViewProj_Row1;
|
|
vec4 g_ViewProj_Row2;
|
|
vec4 g_ViewProj_Row3;
|
|
vec4 g_CamPos;
|
|
vec4 g_CamRight;
|
|
vec4 g_CamUp;
|
|
vec4 g_CamFront;
|
|
vec4 g_SunDir;
|
|
vec4 g_SunColor;
|
|
vec4 g_TimeParams;
|
|
vec4 g_ResolutionParams;
|
|
vec4 g_CamAxisRight;
|
|
vec4 g_FogColor_Distance;
|
|
vec4 g_ShadowVP_Row0;
|
|
vec4 g_ShadowVP_Row1;
|
|
vec4 g_ShadowVP_Row2;
|
|
vec4 g_ShadowVP_Row3;
|
|
} _236;
|
|
|
|
layout(binding = 1) uniform mediump sampler2D TexLOD;
|
|
layout(binding = 0) uniform mediump sampler2D TexHeightmap;
|
|
|
|
layout(location = 1) in vec4 LODWeights;
|
|
#ifdef GL_ARB_shader_draw_parameters
|
|
#define SPIRV_Cross_BaseInstance gl_BaseInstanceARB
|
|
#else
|
|
uniform int SPIRV_Cross_BaseInstance;
|
|
#endif
|
|
layout(location = 0) in vec2 Position;
|
|
layout(location = 1) out vec3 EyeVec;
|
|
layout(location = 0) out vec2 TexCoord;
|
|
|
|
void main()
|
|
{
|
|
float _301 = all(equal(LODWeights, vec4(0.0))) ? _53.Patches[(gl_InstanceID + SPIRV_Cross_BaseInstance)].Position.w : dot(LODWeights, _53.Patches[(gl_InstanceID + SPIRV_Cross_BaseInstance)].LODs);
|
|
float _303 = floor(_301);
|
|
uint _308 = uint(_303);
|
|
uvec2 _310 = uvec2(Position);
|
|
uvec2 _317 = (uvec2(1u) << uvec2(_308, _308 + 1u)) - uvec2(1u);
|
|
uint _384;
|
|
if (_310.x < 32u)
|
|
{
|
|
_384 = _317.x;
|
|
}
|
|
else
|
|
{
|
|
_384 = 0u;
|
|
}
|
|
uint _385;
|
|
if (_310.y < 32u)
|
|
{
|
|
_385 = _317.y;
|
|
}
|
|
else
|
|
{
|
|
_385 = 0u;
|
|
}
|
|
vec4 _345 = vec4((_310 + uvec2(_384, _385)).xyxy & (~_317).xxyy);
|
|
vec2 _173 = ((_53.Patches[(gl_InstanceID + SPIRV_Cross_BaseInstance)].Position.xz * _156.InvGroundSize_PatchScale.zw) + mix(_345.xy, _345.zw, vec2(_301 - _303))) * _156.InvGroundSize_PatchScale.xy;
|
|
mediump float _362 = textureLod(TexLOD, _173, 0.0).x * 7.96875;
|
|
float _364 = floor(_362);
|
|
vec2 _185 = _156.InvGroundSize_PatchScale.xy * exp2(_364);
|
|
vec3 _230 = (vec3(_173.x, mix(textureLod(TexHeightmap, _173 + (_185 * 0.5), _364).x, textureLod(TexHeightmap, _173 + (_185 * 1.0), _364 + 1.0).x, _362 - _364), _173.y) * _156.GroundScale.xyz) + _156.GroundPosition.xyz;
|
|
EyeVec = _230 - _236.g_CamPos.xyz;
|
|
TexCoord = _173 + (_156.InvGroundSize_PatchScale.xy * 0.5);
|
|
gl_Position = (((_236.g_ViewProj_Row0 * _230.x) + (_236.g_ViewProj_Row1 * _230.y)) + (_236.g_ViewProj_Row2 * _230.z)) + _236.g_ViewProj_Row3;
|
|
}
|
|
|