From: Elizabeth Figura zfigura@codeweavers.com
Ported from a5b6162d258faa42a03e53af9fb513473b4255a3 in vkd3d. --- dlls/wined3d/glsl_shader.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 9ca3ea226ee..186264a428d 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -4335,9 +4335,11 @@ static void shader_glsl_to_int(const struct wined3d_shader_instruction *ins) shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src_param);
if (mask_size > 1) - shader_addline(buffer, "ivec%u(max(%s, vec%u(-2147483648.0))));\n", mask_size, src_param.param_str, mask_size); + shader_addline(buffer, "mix(ivec%u(max(%s, vec%u(-2147483648.0))), ivec%u(0x7fffffff), greaterThanEqual(%s, vec%u(2147483648.0))));\n", + mask_size, src_param.param_str, mask_size, mask_size, src_param.param_str, mask_size); else - shader_addline(buffer, "int(max(%s, -2147483648.0)));\n", src_param.param_str); + shader_addline(buffer, "mix(int(max(%s, -2147483648.0)), 0x7fffffff, %s >= 2147483648.0));\n", + src_param.param_str, src_param.param_str); }
static void shader_glsl_to_uint(const struct wined3d_shader_instruction *ins)