r600/sfn: Add option to get a temp value for a specific channel
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5963>
diff --git a/src/gallium/drivers/r600/sfn/sfn_valuepool.cpp b/src/gallium/drivers/r600/sfn/sfn_valuepool.cpp
index 579e39f..750073a 100644
--- a/src/gallium/drivers/r600/sfn/sfn_valuepool.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_valuepool.cpp
@@ -151,8 +151,14 @@
return from_nir(v.src, component, v.swizzle[component]);
}
-PValue ValuePool::get_temp_register()
+PValue ValuePool::get_temp_register(int channel)
{
+ /* Skip to next register to get the channel we want */
+ if (next_temp_reg_comp <= channel)
+ next_temp_reg_comp = channel;
+ else
+ next_temp_reg_comp = 4;
+
if (next_temp_reg_comp > 3) {
current_temp_reg_index = allocate_temp_register();
next_temp_reg_comp = 0;
diff --git a/src/gallium/drivers/r600/sfn/sfn_valuepool.h b/src/gallium/drivers/r600/sfn/sfn_valuepool.h
index acb0454..dc44777 100644
--- a/src/gallium/drivers/r600/sfn/sfn_valuepool.h
+++ b/src/gallium/drivers/r600/sfn/sfn_valuepool.h
@@ -184,7 +184,7 @@
PValue literal(uint32_t value);
- PValue get_temp_register();
+ PValue get_temp_register(int channel = -1);
GPRVector get_temp_vec4();