~~This applies on top of !711, the last three commits belong here.~~
This MR and the following ones will introduce a number of optimization passes on the structured representation of the shader, with the goal of fixing the idiosyncrasies of the code generated by the new structurizer. The general pattern is that we want to recognize when the combination of loops and jumps can be rather written with selection constructs. Ideally that should bring to removing all the synthesized loop intervals, but that cannot be guaranteed in general. We still want to do remove all the loops we can, first to make the generated code easier to read and to recompile, and second because having fewer loops also means that more multilevel jumps become ordinary single level jumps, which do not require overhead to be represented in SPIR-V.
--
v5: vkd3d-shader/ir: Synthesize selection constructs from conditional jumps.
vkd3d-shader/ir: Remove trailing `continue's.
vkd3d-shader/ir: Move `continue's to the false branch when possible.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/722
Overall this is simpler, results in less verbose SPIR-V code which is easier to debug, and eliminates stuttering issues in Horizon Zero Dawn when run in an SM 6 dev branch with Gio's cfg4 structuriser branch.
--
v4: vkd3d-shader/ir: Materialise SSAs to temps before lowering switch instructions.
vkd3d-shader/ir: Convert SSAs to temps only if the block of origin does not dominate all uses.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/749
--
v3: vkd3d-shader/spirv: Ensure the data register is UINT in spirv_compiler_emit_store_tgsm().
vkd3d-shader/spirv: Bitcast if necessary in spirv_compiler_emit_store_dst_components().
vkd3d-shader/dxil: Support constexpr GEP.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/750
Overall this is simpler, results in less verbose SPIR-V code which is easier to debug, and eliminates stuttering issues in Horizon Zero Dawn when run in an SM 6 dev branch with Gio's cfg4 structuriser branch.
--
v3: vkd3d-shader/ir: Materialise SSAs to temps before lowering switch instructions.
vkd3d-shader/ir: Convert SSAs to temps only if the block of origin does not dominate all uses.
vkd3d-shader/spirv: Handle uint2 to double bitcast in spirv_compiler_emit_mov().
vkd3d-shader/spirv: Emit a uint result for RESINFO_UINT if the dst register is SSA.
vkd3d-shader/ir: Materialise phis to temps in the incoming blocks.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/749
Overall this is simpler, results in less verbose SPIR-V code which is easier to debug, and eliminates stuttering issues in Horizon Zero Dawn when run in an SM 6 dev branch with Gio's cfg4 structuriser branch.
--
v2: vkd3d-shader/ir: Materialise SSAs to temps before lowering switch instructions.
vkd3d-shader/ir: Convert SSAs to temps only if the block of origin does not dominate all uses.
vkd3d-shader/spirv: Emit a uint result for RESINFO_UINT if the dst register is SSA.
vkd3d-shader/ir: Materialise phis to temps in the incoming blocks.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/749