Module: Mesa
Branch: main
Commit: 5416d1bc4b2e16663f1860a607eb4be813837dd4
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5416d1bc4b2e16663f1860a607eb4be813837dd4

Author: Gert Wollny <[email protected]>
Date:   Wed Sep  7 08:21:13 2022 +0200

r600/sfn: Don't assert when setting one value

Instead add a method to validate the vec4 registers

Signed-off-by: Gert Wollny <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18619>

---

 src/gallium/drivers/r600/sfn/sfn_virtualvalues.h | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/r600/sfn/sfn_virtualvalues.h 
b/src/gallium/drivers/r600/sfn/sfn_virtualvalues.h
index 5c008e49ae8..52f817fc628 100644
--- a/src/gallium/drivers/r600/sfn/sfn_virtualvalues.h
+++ b/src/gallium/drivers/r600/sfn/sfn_virtualvalues.h
@@ -278,16 +278,25 @@ public:
 
    void set_value(int i, PRegister reg) {
       if (reg->chan() < 4) {
-         for (int k = 0; k < 4; ++k) {
-            assert(i == k || m_values[k]->value()->chan() > 3 ||
-                   m_values[k]->value()->sel() == reg->sel());
-         }
          m_sel = reg->sel();
       }
       m_swz[i] = reg->chan();
       m_values[i]->set_value(reg);
    }
 
+   void validate() {
+      int sel = -1;
+      for (int k = 0; k < 4; ++k) {
+         if (sel < 0) {
+            if (m_values[k]->value()->chan() < 4)
+               sel = m_values[k]->value()->sel();
+         } else {
+            assert(m_values[k]->value()->chan() > 3 ||
+                   m_values[k]->value()->sel() == sel);
+         }
+      }
+   }
+
    bool ready(int block_id, int index) const;
 private:
    int m_sel;

Reply via email to