wined3d: Recognise SM4 scalar swizzles.
This commit is contained in:
parent
21361d5237
commit
3baeaa2b88
|
@ -51,6 +51,9 @@ WINE_DECLARE_DEBUG_CHANNEL(d3d_bytecode);
|
|||
#define WINED3D_SM4_REGISTER_TYPE_SHIFT 12
|
||||
#define WINED3D_SM4_REGISTER_TYPE_MASK (0xf << WINED3D_SM4_REGISTER_TYPE_SHIFT)
|
||||
|
||||
#define WINED3D_SM4_SWIZZLE_TYPE_SHIFT 2
|
||||
#define WINED3D_SM4_SWIZZLE_TYPE_MASK (0x3 << WINED3D_SM4_SWIZZLE_TYPE_SHIFT)
|
||||
|
||||
#define WINED3D_SM4_IMMCONST_TYPE_SHIFT 0
|
||||
#define WINED3D_SM4_IMMCONST_TYPE_MASK (0x3 << WINED3D_SM4_IMMCONST_TYPE_SHIFT)
|
||||
|
||||
|
@ -147,6 +150,12 @@ enum wined3d_sm4_input_primitive_type
|
|||
WINED3D_SM4_INPUT_PT_TRIANGLEADJ = 0x7,
|
||||
};
|
||||
|
||||
enum wined3d_sm4_swizzle_type
|
||||
{
|
||||
WINED3D_SM4_SWIZZLE_VEC4 = 0x1,
|
||||
WINED3D_SM4_SWIZZLE_SCALAR = 0x2,
|
||||
};
|
||||
|
||||
enum wined3d_sm4_immconst_type
|
||||
{
|
||||
WINED3D_SM4_IMMCONST_SCALAR = 0x1,
|
||||
|
@ -609,7 +618,24 @@ static BOOL shader_sm4_read_src_param(struct wined3d_sm4_data *priv, const DWORD
|
|||
}
|
||||
else
|
||||
{
|
||||
src_param->swizzle = (token & WINED3D_SM4_SWIZZLE_MASK) >> WINED3D_SM4_SWIZZLE_SHIFT;
|
||||
enum wined3d_sm4_swizzle_type swizzle_type =
|
||||
(token & WINED3D_SM4_SWIZZLE_TYPE_MASK) >> WINED3D_SM4_SWIZZLE_TYPE_SHIFT;
|
||||
|
||||
switch (swizzle_type)
|
||||
{
|
||||
case WINED3D_SM4_SWIZZLE_SCALAR:
|
||||
src_param->swizzle = (token & WINED3D_SM4_SWIZZLE_MASK) >> WINED3D_SM4_SWIZZLE_SHIFT;
|
||||
src_param->swizzle = (src_param->swizzle & 0x3) * 0x55;
|
||||
break;
|
||||
|
||||
case WINED3D_SM4_SWIZZLE_VEC4:
|
||||
src_param->swizzle = (token & WINED3D_SM4_SWIZZLE_MASK) >> WINED3D_SM4_SWIZZLE_SHIFT;
|
||||
break;
|
||||
|
||||
default:
|
||||
FIXME("Unhandled swizzle type %#x.\n", swizzle_type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
map_register(priv, &src_param->reg);
|
||||
|
|
Loading…
Reference in New Issue