vkd3d-shader/dxil: Do not encode the offset twice for structured TGSM loads.

Currently structured TGSM loads are encoded to something like this:

    ld_structured sr12 <s:float>, sr1 <s:uint>, l(0) <s:uint>, g0[sr1 <s:uint> + 0] <s:float>

Notice how the TGSM offset, expressed by sr1, is encoded twice in
the instruction. In TPF there is no expectation of two indices
in the resource source, so let's avoid producing it for DXIL as
well. The same instruction will therefore become:

    ld_structured sr12 <s:float>, sr1 <s:uint>, l(0) <s:uint>, g0 <s:float>
This commit is contained in:
Giovanni Mascellani
2025-05-02 14:15:54 +02:00
committed by Henri Verbeet
parent 9fdaee1529
commit 4289ec60a1
Notes: Henri Verbeet 2025-05-05 15:28:43 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1481

View File

@@ -7348,6 +7348,8 @@ static void sm6_parser_emit_load(struct sm6_parser *sm6, const struct dxil_recor
src_param_make_constant_uint(&src_params[1], 0); src_param_make_constant_uint(&src_params[1], 0);
src_param_init_from_value(&src_params[2], ptr); src_param_init_from_value(&src_params[2], ptr);
src_params[2].reg.alignment = alignment; src_params[2].reg.alignment = alignment;
/* The offset is already in src_params[0]. */
src_params[2].reg.idx_count = 1;
} }
else else
{ {