From 1205999c229b8e67af39fb9875bd87bc0a1404eb Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 1 Jun 2016 15:01:04 -0700 Subject: [PATCH] i965/fs: Copy the offset when lowering logical pull constant sends This fixes 64 Vulkan CTS tests per gen Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96299 Reviewed-by: Francisco Jerez Cc: "12.0" --- src/mesa/drivers/dri/i965/brw_fs.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 00d937e30a7..bd026de0c57 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -4448,6 +4448,14 @@ lower_varying_pull_constant_logical_send(const fs_builder &bld, fs_inst *inst) const brw_device_info *devinfo = bld.shader->devinfo; if (devinfo->gen >= 7) { + /* We are switching the instruction from an ALU-like instruction to a + * send-from-grf instruction. Since sends can't handle strides or + * source modifiers, we have to make a copy of the offset source. + */ + fs_reg tmp = bld.vgrf(BRW_REGISTER_TYPE_UD); + bld.MOV(tmp, inst->src[1]); + inst->src[1] = tmp; + inst->opcode = FS_OPCODE_VARYING_PULL_CONSTANT_LOAD_GEN7; } else { -- 2.30.2