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();