vkd3d-shader/fx: Fix the parsing of indexes in eval() blocks, write expr in the same format as fxc, and add umod instr.

While implementing the writter side of eval() blocks, i noticed we're not quite parsing those correctly. So here's what i've got so far.

It's still missing some fixes for CLI entries, as it turns out CLI4 is interpreted as either float or uint32_t depending on context, i'll send out this as another PR later.

Registers in fxlc arguments can contain any number of chained index registers, while always having at least one, making the bytecode value 0 to mean "one (non-indexed) register".

Note the fxc's parsing of constant buffer registers seems to be broken, it'll always print out variable offsets from the target variable (aka last register in the index-chain), since the d3d-asm output is meant to be human readable and not machine parseable, let's properly print out the correct variable names/offsets.

Merge request reports

Loading