diff options
author | Daniel Schürmann <[email protected]> | 2020-06-26 12:13:20 +0100 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-06-26 19:21:57 +0000 |
commit | 5c0f82b0d72927b98157300f5c9017f99299fbd4 (patch) | |
tree | 4229330fd31172a18ce3d818660eb77f60c455f1 | |
parent | 66482303f6d19f1e498b31626c3cbae75e44e957 (diff) |
aco: fix partial copies on GFX6/7
While we don't allow partial subdword copies,
we still need to be able to split 64bit registers
Reviewed-by: Rhys Perry <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5663>
-rw-r--r-- | src/amd/compiler/aco_lower_to_hw_instr.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/amd/compiler/aco_lower_to_hw_instr.cpp b/src/amd/compiler/aco_lower_to_hw_instr.cpp index 1973cca027e..f052f7ed792 100644 --- a/src/amd/compiler/aco_lower_to_hw_instr.cpp +++ b/src/amd/compiler/aco_lower_to_hw_instr.cpp @@ -1323,7 +1323,7 @@ void handle_operands(std::map<PhysReg, copy_operation>& copy_map, lower_context* return; } if (it == copy_map.end()) { - if (!skip_partial_copies || ctx->program->chip_class < GFX8) + if (!skip_partial_copies) break; skip_partial_copies = false; it = copy_map.begin(); @@ -1423,7 +1423,8 @@ void handle_operands(std::map<PhysReg, copy_operation>& copy_map, lower_context* * a partial copy allows further copies, it should be done instead. */ bool partial_copy = (has_zero_use_bytes == 0xf) || (has_zero_use_bytes == 0xf0); for (std::pair<const PhysReg, copy_operation>& copy : copy_map) { - if (partial_copy) + /* on GFX6/7, we can only do copies with full registers */ + if (partial_copy || ctx->program->chip_class <= GFX7) break; for (uint16_t i = 0; i < copy.second.bytes; i++) { /* distance might underflow */ |