mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/tpf: Parse register dimension for all register types.
This commit is contained in:
parent
e904660497
commit
33f47c5ae9
Notes:
Alexandre Julliard
2023-09-26 22:47:43 +02:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/319
@ -519,6 +519,22 @@ enum vkd3d_sm4_dimension
|
||||
VKD3D_SM4_DIMENSION_VEC4 = 0x2,
|
||||
};
|
||||
|
||||
static enum vsir_dimension vsir_dimension_from_sm4_dimension(enum vkd3d_sm4_dimension dim)
|
||||
{
|
||||
switch (dim)
|
||||
{
|
||||
case VKD3D_SM4_DIMENSION_NONE:
|
||||
return VSIR_DIMENSION_NONE;
|
||||
case VKD3D_SM4_DIMENSION_SCALAR:
|
||||
return VSIR_DIMENSION_SCALAR;
|
||||
case VKD3D_SM4_DIMENSION_VEC4:
|
||||
return VSIR_DIMENSION_VEC4;
|
||||
default:
|
||||
FIXME("Unknown SM4 dimension %#x.\n", dim);
|
||||
return VSIR_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)
|
||||
@ -1849,15 +1866,16 @@ static bool shader_sm4_read_param(struct vkd3d_shader_sm4_parser *priv, const ui
|
||||
return false;
|
||||
}
|
||||
|
||||
sm4_dimension = (token & VKD3D_SM4_DIMENSION_MASK) >> VKD3D_SM4_DIMENSION_SHIFT;
|
||||
param->dimension = vsir_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:
|
||||
param->dimension = VSIR_DIMENSION_SCALAR;
|
||||
case VSIR_DIMENSION_SCALAR:
|
||||
dword_count = 1 + (register_type == VKD3D_SM4_RT_IMMCONST64);
|
||||
if (end - *ptr < dword_count)
|
||||
{
|
||||
@ -1868,8 +1886,7 @@ static bool shader_sm4_read_param(struct vkd3d_shader_sm4_parser *priv, const ui
|
||||
*ptr += dword_count;
|
||||
break;
|
||||
|
||||
case VKD3D_SM4_DIMENSION_VEC4:
|
||||
param->dimension = VSIR_DIMENSION_VEC4;
|
||||
case VSIR_DIMENSION_VEC4:
|
||||
if (end - *ptr < VKD3D_VEC4_SIZE)
|
||||
{
|
||||
WARN("Invalid ptr %p, end %p.\n", *ptr, end);
|
||||
@ -1880,7 +1897,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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user