Module: wine Branch: master Commit: d968d32a1b53bd4f8ff94de9a19bd657914a233b URL: http://source.winehq.org/git/wine.git/?a=commit;h=d968d32a1b53bd4f8ff94de9a1... Author: Józef Kucia <jkucia(a)codeweavers.com> Date: Wed May 31 11:43:20 2017 +0200 wined3d: Correctly handle phase instance ID register when ARB_shading_language_pack420 is not supported. Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wined3d/glsl_shader.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 27116d0..81b338c 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -2709,6 +2709,17 @@ static void shader_glsl_gen_modifier(enum wined3d_shader_src_modifier src_modifi } } +static void shader_glsl_fixup_scalar_register_variable(char *register_name, + const char *glsl_variable, const struct wined3d_gl_info *gl_info) +{ + /* The ARB_shading_language_420pack extension allows swizzle operations on + * scalars. */ + if (gl_info->supported[ARB_SHADING_LANGUAGE_420PACK]) + sprintf(register_name, "%s", glsl_variable); + else + sprintf(register_name, "ivec2(%s, 0)", glsl_variable); +} + /** Writes the GLSL variable name that corresponds to the register that the * DX opcode parameter is trying to access */ static void shader_glsl_get_register_name(const struct wined3d_shader_register *reg, @@ -3031,18 +3042,14 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register * break; case WINED3DSPR_LOCALTHREADINDEX: - if (gl_info->supported[ARB_SHADING_LANGUAGE_420PACK]) - sprintf(register_name, "int(gl_LocalInvocationIndex)"); - else - sprintf(register_name, "ivec2(gl_LocalInvocationIndex, 0)"); + shader_glsl_fixup_scalar_register_variable(register_name, + "int(gl_LocalInvocationIndex)", gl_info); break; case WINED3DSPR_GSINSTID: case WINED3DSPR_OUTPOINTID: - if (gl_info->supported[ARB_SHADING_LANGUAGE_420PACK]) - sprintf(register_name, "gl_InvocationID"); - else - sprintf(register_name, "ivec2(gl_InvocationID, 0)"); + shader_glsl_fixup_scalar_register_variable(register_name, + "gl_InvocationID", gl_info); break; case WINED3DSPR_THREADID: @@ -3059,7 +3066,8 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register * case WINED3DSPR_FORKINSTID: case WINED3DSPR_JOININSTID: - sprintf(register_name, "phase_instance_id"); + shader_glsl_fixup_scalar_register_variable(register_name, + "phase_instance_id", gl_info); break; case WINED3DSPR_TESSCOORD: