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,
|
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
|
enum vkd3d_sm4_resource_type
|
||||||
{
|
{
|
||||||
VKD3D_SM4_RESOURCE_BUFFER = 0x1,
|
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_register_type register_type;
|
||||||
enum vkd3d_sm4_extended_operand_type type;
|
enum vkd3d_sm4_extended_operand_type type;
|
||||||
enum vkd3d_sm4_register_modifier m;
|
enum vkd3d_sm4_register_modifier m;
|
||||||
|
enum vkd3d_sm4_dimension sm4_dimension;
|
||||||
uint32_t token, order, extended;
|
uint32_t token, order, extended;
|
||||||
|
|
||||||
if (*ptr >= end)
|
if (*ptr >= end)
|
||||||
@ -1849,15 +1866,16 @@ static bool shader_sm4_read_param(struct vkd3d_shader_sm4_parser *priv, const ui
|
|||||||
return false;
|
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)
|
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;
|
unsigned int dword_count;
|
||||||
|
|
||||||
switch (dimension)
|
switch (param->dimension)
|
||||||
{
|
{
|
||||||
case VKD3D_SM4_DIMENSION_SCALAR:
|
case VSIR_DIMENSION_SCALAR:
|
||||||
param->dimension = VSIR_DIMENSION_SCALAR;
|
|
||||||
dword_count = 1 + (register_type == VKD3D_SM4_RT_IMMCONST64);
|
dword_count = 1 + (register_type == VKD3D_SM4_RT_IMMCONST64);
|
||||||
if (end - *ptr < dword_count)
|
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;
|
*ptr += dword_count;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VKD3D_SM4_DIMENSION_VEC4:
|
case VSIR_DIMENSION_VEC4:
|
||||||
param->dimension = VSIR_DIMENSION_VEC4;
|
|
||||||
if (end - *ptr < VKD3D_VEC4_SIZE)
|
if (end - *ptr < VKD3D_VEC4_SIZE)
|
||||||
{
|
{
|
||||||
WARN("Invalid ptr %p, end %p.\n", *ptr, end);
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
FIXME("Unhandled dimension %#x.\n", dimension);
|
FIXME("Unhandled dimension %#x.\n", param->dimension);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user