v3d: Use ldunif instructions for uniforms.
[mesa.git] / src / broadcom / compiler / vir_opt_small_immediates.c
index d79445e6c2e25af111bc247005cf7c8b171d40b8..47d7722968d8e04c4910169903af3d3d3ed97c06 100644 (file)
@@ -55,18 +55,22 @@ vir_opt_small_immediates(struct v3d_compile *c)
                         continue;
 
                 for (int i = 0; i < vir_get_nsrc(inst); i++) {
-                        struct qreg src = vir_follow_movs(c, inst->src[i]);
+                        if (inst->src[i].file != QFILE_TEMP)
+                                continue;
 
-                        if (src.file != QFILE_UNIF ||
-                            c->uniform_contents[src.index] !=
-                            QUNIFORM_CONSTANT) {
+                        /* See if it's a uniform load. */
+                        struct qinst *src_def = c->defs[inst->src[i].index];
+                        if (!src_def || !src_def->qpu.sig.ldunif)
+                                continue;
+                        int uniform = src_def->uniform;
+
+                        if (c->uniform_contents[uniform] != QUNIFORM_CONSTANT)
                                 continue;
-                        }
 
                         /* Check if the uniform is suitable as a small
                          * immediate.
                          */
-                        uint32_t imm = c->uniform_data[src.index];
+                        uint32_t imm = c->uniform_data[uniform];
                         uint32_t packed;
                         if (!v3d_qpu_small_imm_pack(c->devinfo, imm, &packed))
                                 continue;