diff options
author | Kenneth Graunke <[email protected]> | 2016-06-22 17:01:12 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2016-06-24 15:03:55 -0700 |
commit | 3e04e3758e90b2a65eaefb95155d43605f506961 (patch) | |
tree | 162643d944a8665c2e7e3e66f565670fd114f8d4 /src/mesa | |
parent | 3e258f7e31ab38edd6dbd07a4153c0cc6bce695c (diff) |
i965: Set fs_inst::base_mrf = -1 by default.
On MRF platforms, we need to set base_mrf to the first MRF value we'd
like to use for the message. On send-from-GRF platforms, we set it to
-1 to indicate that the operation doesn't use MRFs.
As MRF platforms are becoming increasingly a thing of the past, we've
forgotten to bother with this. It makes more sense to set it to -1 by
default, so we don't have to think about it for new code.
I searched the code for every instance of 'mlen =' in brw_fs*cpp, and
it appears that all MRF-based messages correctly program a base_mrf.
Forgetting to set base_mrf = -1 can confuse the register allocator,
causing it to think we have a large fake-MRF region. This ends up
moving the send-with-EOT registers earlier, sometimes even out of
the g112-g127 range, which is illegal. For example, this fixes
illegal sends in Piglit's arb_gpu_shader_fp64-layout-std430-fp64-shader,
which had SSBO messages with mlen > 0 but base_mrf == 0.
Cc: [email protected]
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Francisco Jerez <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 51f163418ce..51755850cee 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -57,6 +57,7 @@ fs_inst::init(enum opcode opcode, uint8_t exec_size, const fs_reg &dst, this->dst = dst; this->sources = sources; this->exec_size = exec_size; + this->base_mrf = -1; assert(dst.file != IMM && dst.file != UNIFORM); |