i965/fs: Set stride correctly for immediates in fs_reg(brw_reg).
authorMatt Turner <mattst88@gmail.com>
Mon, 2 Nov 2015 00:25:04 +0000 (00:25 +0000)
committerMatt Turner <mattst88@gmail.com>
Fri, 13 Nov 2015 19:27:51 +0000 (11:27 -0800)
The fs_reg() constructors for immediates set stride to 0, except for
vector-immediates, which set stride to 1.  This patch makes the fs_reg
constructor that takes a brw_reg do likewise, so that stride is set
correctly for cases such as fs_reg(brw_imm_v(...)).

The generator asserts that this is true (and presumably it's useful in
some optimization passes?) and the VF fs_reg constructors did this (by
virtue of the fact that it doesn't override what init() does).

In the next commit, calling this constructor with brw_imm_* will generate
an IMM file register rather than a HW_REG, making this change necessary
to avoid breakage with existing uses of brw_imm_v().

Reviewed-by: Emil Velikov <emil.velikov@collabora.co.uk>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs.cpp

index e8ac1c2..ba42d71 100644 (file)
@@ -428,6 +428,12 @@ fs_reg::fs_reg(struct brw_reg reg) :
    this->subreg_offset = 0;
    this->reladdr = NULL;
    this->stride = 1;
+   if (this->file == IMM &&
+       (this->type != BRW_REGISTER_TYPE_V &&
+        this->type != BRW_REGISTER_TYPE_UV &&
+        this->type != BRW_REGISTER_TYPE_VF)) {
+      this->stride = 0;
+   }
 }
 
 bool