Commit d968d32a authored by Józef Kucia's avatar Józef Kucia Committed by Alexandre Julliard

wined3d: Correctly handle phase instance ID register when…

wined3d: Correctly handle phase instance ID register when ARB_shading_language_pack420 is not supported. Signed-off-by: 's avatarJózef Kucia <jkucia@codeweavers.com> Signed-off-by: 's avatarHenri Verbeet <hverbeet@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 9fe0764a
......@@ -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:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment