[PATCH 3/5] wined3d: Check relative addressing indices when accessing uniforms in GLSL shaders.
Matteo Bruni
mbruni at codeweavers.com
Thu Feb 11 09:10:47 CST 2016
Accessing outside the array should return 0.0.
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
This fixes bug 34052.
dlls/wined3d/glsl_shader.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 1b82858..6b25b4e 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -2256,9 +2256,13 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
if (reg->idx[0].rel_addr)
{
if (reg->idx[0].offset)
- sprintf(register_name, "%s_c[%s + %u]", prefix, rel_param0.param_str, reg->idx[0].offset);
+ sprintf(register_name, "(%s + %u >= 0 && %s + %u < %u ? %s_c[%s + %u] : vec4(0.0))",
+ rel_param0.param_str, reg->idx[0].offset, rel_param0.param_str, reg->idx[0].offset,
+ shader->limits->constant_float, prefix, rel_param0.param_str, reg->idx[0].offset);
else
- sprintf(register_name, "%s_c[%s]", prefix, rel_param0.param_str);
+ sprintf(register_name, "(%s >= 0 && %s < %u ? %s_c[%s] : vec4(0.0))",
+ rel_param0.param_str, rel_param0.param_str, shader->limits->constant_float,
+ prefix, rel_param0.param_str);
}
else
{
--
2.4.10
More information about the wine-patches
mailing list