diff options
author | Gert Wollny <gert.wollny@collabora.com> | 2020-07-21 11:52:41 +0200 |
---|---|---|
committer | Gert Wollny <gw.fossdev@gmail.com> | 2020-08-09 13:45:34 +0000 |
commit | 702619c4126f7d69a6aab9c00b29c51e8b3a8552 (patch) | |
tree | 9233b1fdd6f1adb9058eec2c220bb930bca5d122 | |
parent | 56dedf052f4af1903a0d312eb9c7721c69f36c69 (diff) |
r600/sfn: Add a mapping table for atomics
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6025>
-rw-r--r-- | src/gallium/drivers/r600/sfn/sfn_emitinstruction.cpp | 4 | ||||
-rw-r--r-- | src/gallium/drivers/r600/sfn/sfn_emitinstruction.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/r600/sfn/sfn_shader_base.h | 8 |
3 files changed, 14 insertions, 0 deletions
diff --git a/src/gallium/drivers/r600/sfn/sfn_emitinstruction.cpp b/src/gallium/drivers/r600/sfn/sfn_emitinstruction.cpp index 62212b911c5..20e573e1f9c 100644 --- a/src/gallium/drivers/r600/sfn/sfn_emitinstruction.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_emitinstruction.cpp @@ -174,6 +174,10 @@ bool EmitInstruction::inject_register(unsigned sel, unsigned swizzle, return m_proc.inject_register(sel, swizzle, reg, map); } +int EmitInstruction::remap_atomic_base(int base) +{ + return m_proc.remap_atomic_base(base); +} const std::set<AluModifiers> EmitInstruction::empty = {}; diff --git a/src/gallium/drivers/r600/sfn/sfn_emitinstruction.h b/src/gallium/drivers/r600/sfn/sfn_emitinstruction.h index 16295713511..a905c3c88e7 100644 --- a/src/gallium/drivers/r600/sfn/sfn_emitinstruction.h +++ b/src/gallium/drivers/r600/sfn/sfn_emitinstruction.h @@ -93,6 +93,8 @@ protected: bool inject_register(unsigned sel, unsigned swizzle, const PValue& reg, bool map); + int remap_atomic_base(int base); + private: ShaderFromNirProcessor& m_proc; diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_base.h b/src/gallium/drivers/r600/sfn/sfn_shader_base.h index 13c94775778..e6e89c68180 100644 --- a/src/gallium/drivers/r600/sfn/sfn_shader_base.h +++ b/src/gallium/drivers/r600/sfn/sfn_shader_base.h @@ -46,6 +46,7 @@ #include <vector> #include <set> #include <stack> +#include <unordered_map> struct nir_instr; @@ -85,6 +86,11 @@ public: void evaluate_spi_sid(r600_shader_io &io); enum chip_class get_chip_class() const; + + int remap_atomic_base(int base) { + return m_atomic_base_map[base]; + } + protected: void set_var_address(nir_deref_instr *instr); @@ -210,6 +216,8 @@ private: r600_pipe_shader_selector& m_sel; int m_atomic_base ; int m_image_count; + + std::unordered_map<int, int> m_atomic_base_map; }; } |