intel/fs: Handle payload node interference in destinations
Starting withd0d039a4d3
, we emit writes to the push constant chunk of the payload to stomp out-of-bounds data to zero for Vulkan. Then, in369eab9420
, we started emitting shader preamble code for emulated push constants on Gen12.5 parts. In either of these cases, we can run into issues if we don't have a proper live range for some of the payload registers where they get used for something and then smashed by our push handling code. We've not seen many issues with this yet because it only happens when you have dead push constants. Fixes:d0d039a4d3
"anv: Emit pushed UBO bounds checking code..." Fixes:369eab9420
"intel/fs: Emit code for Gen12-HP indirect..." Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9501>
This commit is contained in:

committed by
Marge Bot

parent
8b7c2f1800
commit
b9e9f92f73
@@ -384,6 +384,16 @@ void fs_visitor::calculate_payload_ranges(int payload_node_count,
|
||||
}
|
||||
}
|
||||
|
||||
if (inst->dst.file == FIXED_GRF) {
|
||||
int node_nr = inst->dst.nr;
|
||||
if (node_nr < payload_node_count) {
|
||||
for (unsigned j = 0; j < regs_written(inst); j++) {
|
||||
payload_last_use_ip[node_nr + j] = use_ip;
|
||||
assert(node_nr + j < unsigned(payload_node_count));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Special case instructions which have extra implied registers used. */
|
||||
switch (inst->opcode) {
|
||||
case CS_OPCODE_CS_TERMINATE:
|
||||
|
Reference in New Issue
Block a user