mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/dxil: Emit 16-bit UNDEFINED and INVALID values as minimum precision registers.
This commit is contained in:
committed by
Henri Verbeet
parent
b05153e6f9
commit
8b78747629
Notes:
Henri Verbeet
2025-06-18 15:59:59 +02:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1568
@@ -2599,7 +2599,6 @@ static void sm6_register_from_value(struct vkd3d_shader_register *reg, const str
|
|||||||
case VALUE_TYPE_SSA:
|
case VALUE_TYPE_SSA:
|
||||||
register_init_with_id(reg, VKD3DSPR_SSA, data_type, value->u.ssa.id);
|
register_init_with_id(reg, VKD3DSPR_SSA, data_type, value->u.ssa.id);
|
||||||
reg->dimension = sm6_type_is_scalar(value->type) ? VSIR_DIMENSION_SCALAR : VSIR_DIMENSION_VEC4;
|
reg->dimension = sm6_type_is_scalar(value->type) ? VSIR_DIMENSION_SCALAR : VSIR_DIMENSION_VEC4;
|
||||||
register_convert_to_minimum_precision(reg);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VALUE_TYPE_ICB:
|
case VALUE_TYPE_ICB:
|
||||||
@@ -2607,7 +2606,6 @@ static void sm6_register_from_value(struct vkd3d_shader_register *reg, const str
|
|||||||
reg->idx[0].offset = value->u.icb.id;
|
reg->idx[0].offset = value->u.icb.id;
|
||||||
register_index_address_init(®->idx[1], value->u.icb.index.index, sm6);
|
register_index_address_init(®->idx[1], value->u.icb.index.index, sm6);
|
||||||
reg->idx[1].is_in_bounds = value->u.icb.index.is_in_bounds;
|
reg->idx[1].is_in_bounds = value->u.icb.index.is_in_bounds;
|
||||||
register_convert_to_minimum_precision(reg);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VALUE_TYPE_IDXTEMP:
|
case VALUE_TYPE_IDXTEMP:
|
||||||
@@ -2615,7 +2613,6 @@ static void sm6_register_from_value(struct vkd3d_shader_register *reg, const str
|
|||||||
reg->idx[0].offset = value->u.idxtemp.id;
|
reg->idx[0].offset = value->u.idxtemp.id;
|
||||||
register_index_address_init(®->idx[1], value->u.idxtemp.index.index, sm6);
|
register_index_address_init(®->idx[1], value->u.idxtemp.index.index, sm6);
|
||||||
reg->idx[1].is_in_bounds = value->u.idxtemp.index.is_in_bounds;
|
reg->idx[1].is_in_bounds = value->u.idxtemp.index.is_in_bounds;
|
||||||
register_convert_to_minimum_precision(reg);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VALUE_TYPE_GROUPSHAREDMEM:
|
case VALUE_TYPE_GROUPSHAREDMEM:
|
||||||
@@ -2623,14 +2620,12 @@ static void sm6_register_from_value(struct vkd3d_shader_register *reg, const str
|
|||||||
reg->idx[0].offset = value->u.groupsharedmem.id;
|
reg->idx[0].offset = value->u.groupsharedmem.id;
|
||||||
register_index_address_init(®->idx[1], value->u.groupsharedmem.index.index, sm6);
|
register_index_address_init(®->idx[1], value->u.groupsharedmem.index.index, sm6);
|
||||||
reg->idx[1].is_in_bounds = value->u.groupsharedmem.index.is_in_bounds;
|
reg->idx[1].is_in_bounds = value->u.groupsharedmem.index.is_in_bounds;
|
||||||
register_convert_to_minimum_precision(reg);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VALUE_TYPE_CONSTANT:
|
case VALUE_TYPE_CONSTANT:
|
||||||
vsir_register_init(reg, scalar_type->u.width == 64 ? VKD3DSPR_IMMCONST64 : VKD3DSPR_IMMCONST,
|
vsir_register_init(reg, scalar_type->u.width == 64 ? VKD3DSPR_IMMCONST64 : VKD3DSPR_IMMCONST,
|
||||||
data_type, 0);
|
data_type, 0);
|
||||||
reg->u = value->u.constant.immconst;
|
reg->u = value->u.constant.immconst;
|
||||||
register_convert_to_minimum_precision(reg);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VALUE_TYPE_UNDEFINED:
|
case VALUE_TYPE_UNDEFINED:
|
||||||
@@ -2644,6 +2639,7 @@ static void sm6_register_from_value(struct vkd3d_shader_register *reg, const str
|
|||||||
vkd3d_unreachable();
|
vkd3d_unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
register_convert_to_minimum_precision(reg);
|
||||||
reg->non_uniform = value->non_uniform;
|
reg->non_uniform = value->non_uniform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user