wined3d: Explicitly pass register type and index to shader_is_scalar().
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 7c0ea51..e24b951 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -1184,7 +1184,8 @@
char *ptr = write_mask;
DWORD mask = param & WINED3DSP_WRITEMASK_ALL;
- if (shader_is_scalar(param)) {
+ if (shader_is_scalar(shader_get_regtype(param), param & WINED3DSP_REGNUM_MASK))
+ {
mask = WINED3DSP_WRITEMASK_0;
} else {
*ptr++ = '.';
@@ -1218,7 +1219,8 @@
const char *swizzle_chars = fixup ? "zyxw" : "xyzw";
char *ptr = swizzle_str;
- if (!shader_is_scalar(param)) {
+ if (!shader_is_scalar(shader_get_regtype(param), param & WINED3DSP_REGNUM_MASK))
+ {
*ptr++ = '.';
/* swizzle bits fields: wwzzyyxx */
if (mask & WINED3DSP_WRITEMASK_0) *ptr++ = swizzle_chars[swizzle & 0x03];
@@ -1900,7 +1902,7 @@
char mask_char[6];
BOOL temp_destination = FALSE;
- if (shader_is_scalar(ins->src[0]))
+ if (shader_is_scalar(shader_get_regtype(ins->src[0]), ins->src[0] & WINED3DSP_REGNUM_MASK))
{
write_mask = shader_glsl_append_dst(ins->buffer, ins);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index ccc681f..070a590 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2386,16 +2386,13 @@
return WINED3DSIO_COMMENT == (token & WINED3DSI_OPCODE_MASK);
}
-static inline BOOL shader_is_scalar(DWORD param) {
- DWORD reg_type = shader_get_regtype(param);
- DWORD reg_num;
-
- switch (reg_type) {
+static inline BOOL shader_is_scalar(WINED3DSHADER_PARAM_REGISTER_TYPE register_type, UINT register_idx)
+{
+ switch (register_type)
+ {
case WINED3DSPR_RASTOUT:
- if ((param & WINED3DSP_REGNUM_MASK) != 0) {
- /* oFog & oPts */
- return TRUE;
- }
+ /* oFog & oPts */
+ if (register_idx != 0) return TRUE;
/* oPos */
return FALSE;
@@ -2406,8 +2403,8 @@
return TRUE;
case WINED3DSPR_MISCTYPE:
- reg_num = param & WINED3DSP_REGNUM_MASK;
- switch(reg_num) {
+ switch(register_idx)
+ {
case 0: /* vPos */
return FALSE;
case 1: /* vFace */