ef247e75ec
Opt-in to using the extension to support gl_InstanceIndex.
127 lines
3.4 KiB
GLSL
127 lines
3.4 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 Offsets
|
|
{
|
|
PatchData Patches[256];
|
|
} _53;
|
|
|
|
layout(binding = 4, std140) uniform GlobalOcean
|
|
{
|
|
vec4 OceanScale;
|
|
vec4 OceanPosition;
|
|
vec4 InvOceanSize_PatchScale;
|
|
vec4 NormalTexCoordScale;
|
|
} _180;
|
|
|
|
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;
|
|
} _273;
|
|
|
|
layout(binding = 1) uniform mediump sampler2D TexLOD;
|
|
layout(binding = 0) uniform mediump sampler2D TexDisplacement;
|
|
|
|
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 vec4 Position;
|
|
layout(location = 0) out vec3 EyeVec;
|
|
layout(location = 1) out vec4 TexCoord;
|
|
|
|
uvec4 _476;
|
|
|
|
void main()
|
|
{
|
|
float _351 = 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 _353 = floor(_351);
|
|
uint _358 = uint(_353);
|
|
uvec4 _360 = uvec4(Position);
|
|
uvec2 _367 = (uvec2(1u) << uvec2(_358, _358 + 1u)) - uvec2(1u);
|
|
bool _370 = _360.x < 32u;
|
|
uint _467;
|
|
if (_370)
|
|
{
|
|
_467 = _367.x;
|
|
}
|
|
else
|
|
{
|
|
_467 = 0u;
|
|
}
|
|
uvec4 _445 = _476;
|
|
_445.x = _467;
|
|
bool _380 = _360.y < 32u;
|
|
uint _470;
|
|
if (_380)
|
|
{
|
|
_470 = _367.x;
|
|
}
|
|
else
|
|
{
|
|
_470 = 0u;
|
|
}
|
|
uvec4 _449 = _445;
|
|
_449.y = _470;
|
|
uint _472;
|
|
if (_370)
|
|
{
|
|
_472 = _367.y;
|
|
}
|
|
else
|
|
{
|
|
_472 = 0u;
|
|
}
|
|
uvec4 _453 = _449;
|
|
_453.z = _472;
|
|
uint _474;
|
|
if (_380)
|
|
{
|
|
_474 = _367.y;
|
|
}
|
|
else
|
|
{
|
|
_474 = 0u;
|
|
}
|
|
uvec4 _457 = _453;
|
|
_457.w = _474;
|
|
vec4 _416 = vec4((_360.xyxy + _457) & (~_367).xxyy);
|
|
vec2 _197 = ((_53.Patches[(gl_InstanceID + SPIRV_Cross_BaseInstance)].Position.xz * _180.InvOceanSize_PatchScale.zw) + mix(_416.xy, _416.zw, vec2(_351 - _353))) * _180.InvOceanSize_PatchScale.xy;
|
|
vec2 _204 = _197 * _180.NormalTexCoordScale.zw;
|
|
mediump float _433 = textureLod(TexLOD, _197, 0.0).x * 7.96875;
|
|
float _435 = floor(_433);
|
|
vec2 _220 = (_180.InvOceanSize_PatchScale.xy * exp2(_435)) * _180.NormalTexCoordScale.zw;
|
|
vec3 _267 = ((vec3(_197.x, 0.0, _197.y) + mix(textureLod(TexDisplacement, _204 + (_220 * 0.5), _435).yxz, textureLod(TexDisplacement, _204 + (_220 * 1.0), _435 + 1.0).yxz, vec3(_433 - _435))) * _180.OceanScale.xyz) + _180.OceanPosition.xyz;
|
|
EyeVec = _267 - _273.g_CamPos.xyz;
|
|
TexCoord = vec4(_204, _204 * _180.NormalTexCoordScale.xy) + ((_180.InvOceanSize_PatchScale.xyxy * 0.5) * _180.NormalTexCoordScale.zwzw);
|
|
gl_Position = (((_273.g_ViewProj_Row0 * _267.x) + (_273.g_ViewProj_Row1 * _267.y)) + (_273.g_ViewProj_Row2 * _267.z)) + _273.g_ViewProj_Row3;
|
|
}
|
|
|