wined3d: Recognize the SM4 ABS and NEG source modifiers.
This commit is contained in:
parent
50f6fbadb0
commit
e54d9afbc3
@ -366,7 +366,29 @@ static void shader_sm4_read_src_param(void *data, const DWORD **ptr, struct wine
|
|||||||
if (token & WINED3D_SM4_REGISTER_MODIFIER)
|
if (token & WINED3D_SM4_REGISTER_MODIFIER)
|
||||||
{
|
{
|
||||||
DWORD modifier = *(*ptr)++;
|
DWORD modifier = *(*ptr)++;
|
||||||
|
|
||||||
|
/* FIXME: This will probably break down at some point. The SM4
|
||||||
|
* modifiers look like flags, while wined3d currently has an enum
|
||||||
|
* with possible combinations, e.g. WINED3DSPSM_ABSNEG. */
|
||||||
|
switch (modifier)
|
||||||
|
{
|
||||||
|
case 0x41:
|
||||||
|
src_param->modifiers = WINED3DSPSM_NEG;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x81:
|
||||||
|
src_param->modifiers = WINED3DSPSM_ABS;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
FIXME("Skipping modifier 0x%08x.\n", modifier);
|
FIXME("Skipping modifier 0x%08x.\n", modifier);
|
||||||
|
src_param->modifiers = WINED3DSPSM_NONE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
src_param->modifiers = WINED3DSPSM_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
order = (token & WINED3D_SM4_REGISTER_ORDER_MASK) >> WINED3D_SM4_REGISTER_ORDER_SHIFT;
|
order = (token & WINED3D_SM4_REGISTER_ORDER_MASK) >> WINED3D_SM4_REGISTER_ORDER_SHIFT;
|
||||||
@ -409,7 +431,6 @@ static void shader_sm4_read_src_param(void *data, const DWORD **ptr, struct wine
|
|||||||
src_param->swizzle = (token & WINED3D_SM4_SWIZZLE_MASK) >> WINED3D_SM4_SWIZZLE_SHIFT;
|
src_param->swizzle = (token & WINED3D_SM4_SWIZZLE_MASK) >> WINED3D_SM4_SWIZZLE_SHIFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
src_param->modifiers = 0;
|
|
||||||
src_param->reg.rel_addr = NULL;
|
src_param->reg.rel_addr = NULL;
|
||||||
|
|
||||||
map_register(priv, &src_param->reg);
|
map_register(priv, &src_param->reg);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user