mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 19:30:12 +01:00
intel/compiler: do not copy-propagate strided regions to ddx/ddy arguments
The implementation of these opcodes in the generator assumes that their
arguments are packed, and it generates register regions based on that
assumption.
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
(cherry picked from commit 3918943211)
This commit is contained in:
parent
5694279c14
commit
f036a040bb
1 changed files with 21 additions and 0 deletions
|
|
@ -371,6 +371,20 @@ can_take_stride(fs_inst *inst, unsigned arg, unsigned stride,
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
instruction_requires_packed_data(fs_inst *inst)
|
||||
{
|
||||
switch (inst->opcode) {
|
||||
case FS_OPCODE_DDX_FINE:
|
||||
case FS_OPCODE_DDX_COARSE:
|
||||
case FS_OPCODE_DDY_FINE:
|
||||
case FS_OPCODE_DDY_COARSE:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
fs_visitor::try_copy_propagate(fs_inst *inst, int arg, acp_entry *entry)
|
||||
{
|
||||
|
|
@ -417,6 +431,13 @@ fs_visitor::try_copy_propagate(fs_inst *inst, int arg, acp_entry *entry)
|
|||
inst->opcode == SHADER_OPCODE_GEN4_SCRATCH_WRITE)
|
||||
return false;
|
||||
|
||||
/* Some instructions implemented in the generator backend, such as
|
||||
* derivatives, assume that their operands are packed so we can't
|
||||
* generally propagate strided regions to them.
|
||||
*/
|
||||
if (instruction_requires_packed_data(inst) && entry->src.stride > 1)
|
||||
return false;
|
||||
|
||||
/* Bail if the result of composing both strides would exceed the
|
||||
* hardware limit.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue