[PATCH 1/6] wined3d: Add a setting to check relative addressing indices when accessing uniforms.
Henri Verbeet
hverbeet at gmail.com
Wed Feb 17 07:44:41 CST 2016
On 16 February 2016 at 20:48, Matteo Bruni <mbruni at codeweavers.com> wrote:
> @@ -2258,9 +2258,25 @@ 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);
> + {
> + if (wined3d_settings.check_float_constants)
> + 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 + %u]", prefix,
> + rel_param0.param_str, reg->idx[0].offset);
> + }
> else
> - sprintf(register_name, "%s_c[%s]", prefix, rel_param0.param_str);
> + {
> + if (wined3d_settings.check_float_constants)
> + 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
> + sprintf(register_name, "%s_c[%s]", prefix, rel_param0.param_str);
> + }
> }
> else
> {
I'd probably just drop the optimization for 0 offsets for
check_float_constants. I.e.:
if (wined3d_settings.check_float_constants)
...
else if (reg->idx[0].offset)
...
else
...
More information about the wine-devel
mailing list