Skip to content

vkd3d-shader/hlsl: Emit fixmes on non-constant vector addressing.

Francisco Casas requested to merge fcasas/vkd3d:nonconst_vector_lhs into master

vkd3d-shader/hlsl: Emit fixmes on non-constant vector addressing.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56162

Storing to a vector component using a non-constant index is not allowed on profiles lower than 6.0. Unless this happens inside a loop that can be unrolled, which we are not doing yet.

For this reason, a validate_nonconstant_vector_store_derefs pass is added to detect these cases.

Ideally we would want to emit an hlsl_error on this pass, but before implementing loop unrolling, we could reach this point on valid HLSL.

Also, as pointed out by Nikolay in the mentioned bug, currently new_offset_from_path_index() fails an assertion when this happens, because it expects an hlsl_ir_constant, so a check is added. It also felt correct to emit an hlsl_fixme there, despite the redundancy.

Edited by Francisco Casas

Merge request reports

Loading