=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Correctly handle phase instance ID register when ARB_shading_language_pack420 is not supported.
Alexandre Julliard
julliard at winehq.org
Wed May 31 16:20:17 CDT 2017
Module: wine
Branch: master
Commit: d968d32a1b53bd4f8ff94de9a19bd657914a233b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d968d32a1b53bd4f8ff94de9a19bd657914a233b
Author: Józef Kucia <jkucia at 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 at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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:
More information about the wine-cvs
mailing list