vkd3d-shader/d3dbc: Normalise I/O register write masks when not disassembling.

Sometimes SM1-3 shaders contain write masks that exceed the
signature element masks. That happens because SM1-3 shaders do not
have a concept of signature and signature masks, and OTOH aren't
always able to express any given write mask.

In VSIR we don't want to deal with I/O register masks exceeding the
corresponding signature element mask or usage mask, because, for
instance, for higher shader models it can complicate dealing with
DCL_INDEX_RANGE. In order to have uniform rules for all shader
models we normalise masks coming from SM1-3 shaders.

We don't do that normalisation when disassembling, in order to
preserve the expected output.
This commit is contained in:
Giovanni Mascellani
2024-12-06 22:27:01 +01:00
committed by Henri Verbeet
parent 64126a00c3
commit dd0ed989a1
Notes: Henri Verbeet 2024-12-12 17:48:46 +01:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Francisco Casas (@fcasas)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1311
3 changed files with 46 additions and 24 deletions

View File

@@ -1411,6 +1411,7 @@ enum vsir_control_flow_type
enum vsir_normalisation_level
{
VSIR_NORMALISED_SM1,
VSIR_NORMALISED_SM4,
VSIR_NORMALISED_HULL_CONTROL_POINT_IO,
VSIR_NORMALISED_SM6,