summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMcGroarty <git@mcgroarty.me>2026-07-26 18:53:19 -0700
committerMcGroarty <git@mcgroarty.me>2026-07-26 18:53:19 -0700
commitd1796fba2500a30bd3c71b0588efd18c1a8625bf (patch)
tree8afbd36410330fbb391cc9f6936d67d06215f048
parentadc5f3cb7819a672c37a73f0c4cd850df536e9da (diff)
Fix rendering on Parallels VMs with graphics set to "low"
In LLRender::syncMatrices(), treat uniform location 0 as valid when uploading the inverse model-view, inverse projection, and identity matrices. Only location -1 indicates that a uniform is absent. (This is a zero-based index.) Fix Parallels GLSL compilation by: - renaming the local waterClip() wrapper to avoid an overload conflict - returning float literals (not ints) from a few functions declared to return float
-rw-r--r--indra/llrender/llrender.cpp6
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/materialF.glsl10
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflUtil.glsl2
3 files changed, 8 insertions, 10 deletions
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 57be8570af..0a9aa462d1 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -1043,7 +1043,7 @@ void LLRender::syncMatrices()
shader->uniformMatrix3fv(LLShaderMgr::NORMAL_MATRIX, 1, GL_FALSE, norm_mat);
}
- if (shader->getUniformLocation(LLShaderMgr::INVERSE_MODELVIEW_MATRIX))
+ if (shader->getUniformLocation(LLShaderMgr::INVERSE_MODELVIEW_MATRIX) >= 0)
{
shader->uniformMatrix4fv(LLShaderMgr::INVERSE_MODELVIEW_MATRIX, 1, GL_FALSE, glm::value_ptr(cached_inv_mdv));
}
@@ -1075,14 +1075,14 @@ void LLRender::syncMatrices()
// GZ: This was previously disabled seemingly due to a bug involving the deferred renderer's regular pushing and popping of mats.
// We're reenabling this and cleaning up the code around that - that would've been the appropriate course initially.
// Anything beyond the standard proj and inv proj mats are special cases. Please setup special uniforms accordingly in the future.
- if (shader->getUniformLocation(LLShaderMgr::INVERSE_PROJECTION_MATRIX))
+ if (shader->getUniformLocation(LLShaderMgr::INVERSE_PROJECTION_MATRIX) >= 0)
{
glm::mat4 inv_proj = glm::inverse(mat);
shader->uniformMatrix4fv(LLShaderMgr::INVERSE_PROJECTION_MATRIX, 1, false, glm::value_ptr(inv_proj));
}
// Used by some full screen effects - such as full screen lights, glow, etc.
- if (shader->getUniformLocation(LLShaderMgr::IDENTITY_MATRIX))
+ if (shader->getUniformLocation(LLShaderMgr::IDENTITY_MATRIX) >= 0)
{
shader->uniformMatrix4fv(LLShaderMgr::IDENTITY_MATRIX, 1, GL_FALSE, glm::value_ptr(glm::identity<glm::mat4>()));
}
diff --git a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
index 5708fc319f..65616e7835 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
@@ -262,7 +262,7 @@ void alphaMask(float alpha)
#endif
}
-void waterClip()
+void applyWaterClip()
{
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
waterClip(vary_position.xyz);
@@ -284,17 +284,17 @@ float getShadow(vec3 pos, vec3 norm)
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
return sampleDirectionalShadow(pos, norm, vary_texcoord0.xy);
#else
- return 1;
+ return 1.0;
#endif
#else
- return 1;
+ return 1.0;
#endif
}
void main()
{
mirrorClip(vary_position);
- waterClip();
+ applyWaterClip();
// diffcol == diffuse map combined with vertex color
vec4 diffcol = texture(diffuseMap, vary_texcoord0.xy);
@@ -441,5 +441,3 @@ void main()
#endif
}
-
-
diff --git a/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflUtil.glsl b/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflUtil.glsl
index e8901c7ba2..c9a19f4278 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflUtil.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflUtil.glsl
@@ -323,7 +323,7 @@ float tapScreenSpaceReflection(int totalSamples, vec2 tc, vec3 viewPos, vec3 n,
{
#ifdef TRANSPARENT_SURFACE
collectedColor = vec4(1, 0, 1, 1);
- return 0;
+ return 0.0;
#endif
collectedColor = vec4(0);
int hits = 0;