vkd3d-shader: Fix modifier handling.

This is a set of flags, so we should treat it as such.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
Philip Rebohle 2020-06-09 13:01:54 +02:00 committed by Hans-Kristian Arntzen
parent 1fa3686638
commit bc7426ceb0
1 changed files with 11 additions and 22 deletions

View File

@ -1538,30 +1538,19 @@ static bool shader_sm4_read_param(struct vkd3d_sm4_data *priv, const DWORD **ptr
}
m = *(*ptr)++;
switch (m)
switch (m & 0xc0)
{
case 0x41:
*modifier = VKD3DSPSM_NEG;
break;
case 0x81:
*modifier = VKD3DSPSM_ABS;
break;
case 0xc1:
*modifier = VKD3DSPSM_ABSNEG;
break;
case 0x20001:
param->modifier = VKD3DSPRM_NONUNIFORM;
*modifier = VKD3DSPSM_NONE;
break;
default:
FIXME("Skipping modifier 0x%08x.\n", m);
*modifier = VKD3DSPSM_NONE;
break;
case 0x00: *modifier = VKD3DSPSM_NONE; break;
case 0x40: *modifier = VKD3DSPSM_NEG; break;
case 0x80: *modifier = VKD3DSPSM_ABS; break;
case 0xc0: *modifier = VKD3DSPSM_ABSNEG; break;
}
if (m & 0x20000)
param->modifier = VKD3DSPRM_NONUNIFORM;
if ((m &= ~(0x200c1)))
FIXME("Skipping modifier 0x%08x.\n", m);
}
else
{