Skip to content

vkd3d-shader/hlsl: Support non-constant offset dereferences, v2, part 1.

Francisco Casas requested to merge fcasas/vkd3d:nonconst-offsets-8-part into master

First part of the continuation of the implementation of non-constant offset dereferences (a.k.a. relative addressing) for SM4, now that we use vsir registers in tpf.c.

As a quick recap: while parsing HLSL we are expressing derefs as paths, and then we are lowering these paths into a single offset node (which is closer to the bytecode) using the replace_deref_path_with_offset() pass, right before register allocation.

This first part of the series splits this offset node into 2 parts:

  • A constant uint, which will be called hlsl_deref.offset_const.
  • A non-hlsl_ir_constant offset node that will only be present when we need relative addressing, that we will end up calling hlsl_deref.offset_rel.

Both these fields will be analog to the ones used in vsir register indexes, vkd3d_shader_register_index.rel_addr and vkd3d_shader_register_index.offset respectively, which is something we need for the second part of this series.

The following patches are in my nonconst-offsets-8 branch, if something is not clear in this series, it may be worth skimming through them.

Supersedes !229 (closed).

Edited by Francisco Casas

Merge request reports

Loading