summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
index ceaaf5f..6aec506 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
@@ -538,6 +538,14 @@ fs_visitor::try_constant_propagate(fs_inst *inst, acp_entry *entry)
entry->dst, entry->regs_written))
continue;
+ /* If the type sizes don't match each channel of the instruction is
+ * either extracting a portion of the constant (which could be handled
+ * with some effort but the code below doesn't) or reading multiple
+ * channels of the source at once.
+ */
+ if (type_sz(inst->src[i].type) != type_sz(entry->dst.type))
+ continue;
+
fs_reg val = entry->src;
val.type = inst->src[i].type;