diff options
author | Jason Ekstrand <[email protected]> | 2014-09-16 16:28:53 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2014-09-30 10:29:15 -0700 |
commit | 1dd9b90ecd8e001b40febfb8908c0b9a0c08c7d5 (patch) | |
tree | 885a4ca24ea64335ffea74ce33df43abe6a23bef /src/mesa/drivers/dri/i965/brw_fs.cpp | |
parent | 29f4c5b5d5d142f19283c06e77bedd4b3793657a (diff) |
i965/fs: Handle COMPR4 in LOAD_PAYLOAD
Signed-off-by: Jason Ekstrand <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_fs.cpp')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 56659f3af51..3277b586ede 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -2988,6 +2988,21 @@ fs_visitor::lower_load_payload() if (inst->src[i].file == BAD_FILE) { /* Do nothing but otherwise increment as normal */ + } else if (dst.file == MRF && + dst.width == 8 && + brw->has_compr4 && + i + 4 < inst->sources && + inst->src[i + 4].equals(horiz_offset(inst->src[i], 8))) { + fs_reg compr4_dst = dst; + compr4_dst.reg += BRW_MRF_COMPR4; + compr4_dst.width = 16; + fs_reg compr4_src = inst->src[i]; + compr4_src.width = 16; + fs_inst *mov = MOV(compr4_dst, compr4_src); + mov->force_writemask_all = true; + inst->insert_before(block, mov); + /* Mark i+4 as BAD_FILE so we don't emit a MOV for it */ + inst->src[i + 4].file = BAD_FILE; } else { fs_inst *mov = MOV(dst, inst->src[i]); if (inst->src[i].file == GRF) { |