r600/sb: handle scratch mem reads on r600
[mesa.git] / src / gallium / drivers / r600 / sb / sb_bc_finalize.cpp
index e737f3d6cd0bb947b922e1aa229b1e3a7eb0afda..5c572938a154792a68fb2feb214b131484e3e4f0 100644 (file)
@@ -778,8 +778,15 @@ void bc_finalizer::finalize_cf(cf_node* c) {
                int reg = -1;
                unsigned mask = 0;
 
+
                for (unsigned chan = 0; chan < 4; ++chan) {
-                       value *v = c->src[chan];
+                       value *v;
+                       if (ctx.hw_class == HW_CLASS_R600 && c->bc.op == CF_OP_MEM_SCRATCH &&
+                           (c->bc.type == 2 || c->bc.type == 3))
+                               v = c->dst[chan];
+                       else
+                               v = c->src[chan];
+
                        if (!v || v->is_undef())
                                continue;