From: Francisco Casas fcasas@codeweavers.com
--- libs/vkd3d-shader/tpf.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-)
diff --git a/libs/vkd3d-shader/tpf.c b/libs/vkd3d-shader/tpf.c index 598dee71..3be4efcc 100644 --- a/libs/vkd3d-shader/tpf.c +++ b/libs/vkd3d-shader/tpf.c @@ -519,6 +519,22 @@ enum vkd3d_sm4_dimension VKD3D_SM4_DIMENSION_VEC4 = 0x2, };
+static enum vkd3d_shader_dimension get_vkd3d_shader_dimension_from_sm4_dimension(enum vkd3d_sm4_dimension dim) +{ + switch (dim) + { + case VKD3D_SM4_DIMENSION_NONE: + return VKD3D_SHADER_DIMENSION_NONE; + case VKD3D_SM4_DIMENSION_SCALAR: + return VKD3D_SHADER_DIMENSION_SCALAR; + case VKD3D_SM4_DIMENSION_VEC4: + return VKD3D_SHADER_DIMENSION_VEC4; + default: + FIXME("Unknown SM4 dimension %#x.\n", dim); + return VKD3D_SHADER_DIMENSION_NONE; + } +} + enum vkd3d_sm4_resource_type { VKD3D_SM4_RESOURCE_BUFFER = 0x1, @@ -1718,6 +1734,7 @@ static bool shader_sm4_read_param(struct vkd3d_shader_sm4_parser *priv, const ui enum vkd3d_sm4_register_type register_type; enum vkd3d_sm4_extended_operand_type type; enum vkd3d_sm4_register_modifier m; + enum vkd3d_sm4_dimension sm4_dimension; uint32_t token, order, extended;
if (*ptr >= end) @@ -1851,14 +1868,16 @@ static bool shader_sm4_read_param(struct vkd3d_shader_sm4_parser *priv, const ui
param->idx_count = order;
+ sm4_dimension = (token & VKD3D_SM4_DIMENSION_MASK) >> VKD3D_SM4_DIMENSION_SHIFT; + param->dimension = get_vkd3d_shader_dimension_from_sm4_dimension(sm4_dimension); + if (register_type == VKD3D_SM4_RT_IMMCONST || register_type == VKD3D_SM4_RT_IMMCONST64) { - enum vkd3d_sm4_dimension dimension = (token & VKD3D_SM4_DIMENSION_MASK) >> VKD3D_SM4_DIMENSION_SHIFT; unsigned int dword_count;
- switch (dimension) + switch (param->dimension) { - case VKD3D_SM4_DIMENSION_SCALAR: + case VKD3D_SHADER_DIMENSION_SCALAR: param->dimension = VKD3D_SHADER_DIMENSION_SCALAR; dword_count = 1 + (register_type == VKD3D_SM4_RT_IMMCONST64); if (end - *ptr < dword_count) @@ -1870,7 +1889,7 @@ static bool shader_sm4_read_param(struct vkd3d_shader_sm4_parser *priv, const ui *ptr += dword_count; break;
- case VKD3D_SM4_DIMENSION_VEC4: + case VKD3D_SHADER_DIMENSION_VEC4: param->dimension = VKD3D_SHADER_DIMENSION_VEC4; if (end - *ptr < VKD3D_VEC4_SIZE) { @@ -1882,7 +1901,7 @@ static bool shader_sm4_read_param(struct vkd3d_shader_sm4_parser *priv, const ui break;
default: - FIXME("Unhandled dimension %#x.\n", dimension); + FIXME("Unhandled dimension %#x.\n", param->dimension); break; } }