Mesa (master): i965/vec4: Handle MOV_INDIRECT in pack_uniform_registers
Jason Ekstrand
jekstrand at kemper.freedesktop.org
Fri Apr 15 21:48:19 UTC 2016
Module: Mesa
Branch: master
Commit: a112391d52a458c588b8770cbf1ca9fce8863b79
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a112391d52a458c588b8770cbf1ca9fce8863b79
Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date: Tue Apr 5 15:43:48 2016 -0700
i965/vec4: Handle MOV_INDIRECT in pack_uniform_registers
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
---
src/mesa/drivers/dri/i965/brw_vec4.cpp | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
index e2aa109..6433fc5 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
@@ -574,6 +574,24 @@ vec4_visitor::pack_uniform_registers()
BRW_GET_SWZ(inst->src[i].swizzle, c) + 1);
}
}
+
+ if (inst->opcode == SHADER_OPCODE_MOV_INDIRECT &&
+ inst->src[0].file == UNIFORM) {
+ assert(inst->src[2].file == BRW_IMMEDIATE_VALUE);
+ assert(inst->src[0].subnr == 0);
+
+ unsigned bytes_read = inst->src[2].ud;
+ assert(bytes_read % 4 == 0);
+ unsigned vec4s_read = DIV_ROUND_UP(bytes_read, 16);
+
+ /* We just mark every register touched by a MOV_INDIRECT as being
+ * fully used. This ensures that it doesn't broken up piecewise by
+ * the next part of our packing algorithm.
+ */
+ int reg = inst->src[0].nr;
+ for (unsigned i = 0; i < vec4s_read; i++)
+ chans_used[reg + i] = 4;
+ }
}
int new_uniform_count = 0;
More information about the mesa-commit
mailing list