=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d-shader: Set xxxx swizzle for scalar registers.
Alexandre Julliard
julliard at winehq.org
Wed Feb 20 16:34:06 CST 2019
Module: vkd3d
Branch: master
Commit: 7b84adec32e4bd1d8f9ee7f92924367a43fdf0da
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=7b84adec32e4bd1d8f9ee7f92924367a43fdf0da
Author: Józef Kucia <jkucia at codeweavers.com>
Date: Wed Feb 20 13:42:49 2019 +0100
vkd3d-shader: Set xxxx swizzle for scalar registers.
Mainly for vOutputControlPointID.
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>
---
libs/vkd3d-shader/dxbc.c | 43 +++++++++++++++++++++++--------------------
1 file changed, 23 insertions(+), 20 deletions(-)
diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index 5e4babb..4911668 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -1511,6 +1511,25 @@ static bool shader_sm4_read_param(struct vkd3d_sm4_data *priv, const DWORD **ptr
return true;
}
+static bool shader_sm4_is_scalar_register(const struct vkd3d_shader_register *reg)
+{
+ switch (reg->type)
+ {
+ case VKD3DSPR_COVERAGE:
+ case VKD3DSPR_DEPTHOUT:
+ case VKD3DSPR_DEPTHOUTGE:
+ case VKD3DSPR_DEPTHOUTLE:
+ case VKD3DSPR_GSINSTID:
+ case VKD3DSPR_LOCALTHREADINDEX:
+ case VKD3DSPR_OUTPOINTID:
+ case VKD3DSPR_PRIMID:
+ case VKD3DSPR_SAMPLEMASK:
+ return true;
+ default:
+ return false;
+ }
+}
+
static bool shader_sm4_read_src_param(struct vkd3d_sm4_data *priv, const DWORD **ptr, const DWORD *end,
enum vkd3d_data_type data_type, struct vkd3d_shader_src_param *src_param)
{
@@ -1541,7 +1560,10 @@ static bool shader_sm4_read_src_param(struct vkd3d_sm4_data *priv, const DWORD *
switch (swizzle_type)
{
case VKD3D_SM4_SWIZZLE_NONE:
- src_param->swizzle = VKD3D_NO_SWIZZLE;
+ if (shader_sm4_is_scalar_register(&src_param->reg))
+ src_param->swizzle = VKD3D_SWIZZLE(VKD3D_SWIZZLE_X, VKD3D_SWIZZLE_X, VKD3D_SWIZZLE_X, VKD3D_SWIZZLE_X);
+ else
+ src_param->swizzle = VKD3D_NO_SWIZZLE;
break;
case VKD3D_SM4_SWIZZLE_SCALAR:
@@ -1562,25 +1584,6 @@ static bool shader_sm4_read_src_param(struct vkd3d_sm4_data *priv, const DWORD *
return true;
}
-static bool shader_sm4_is_scalar_register(const struct vkd3d_shader_register *reg)
-{
- switch (reg->type)
- {
- case VKD3DSPR_COVERAGE:
- case VKD3DSPR_DEPTHOUT:
- case VKD3DSPR_DEPTHOUTGE:
- case VKD3DSPR_DEPTHOUTLE:
- case VKD3DSPR_GSINSTID:
- case VKD3DSPR_LOCALTHREADINDEX:
- case VKD3DSPR_OUTPOINTID:
- case VKD3DSPR_PRIMID:
- case VKD3DSPR_SAMPLEMASK:
- return true;
- default:
- return false;
- }
-}
-
static bool shader_sm4_read_dst_param(struct vkd3d_sm4_data *priv, const DWORD **ptr, const DWORD *end,
enum vkd3d_data_type data_type, struct vkd3d_shader_dst_param *dst_param)
{
More information about the wine-cvs
mailing list