freedreno/ir3: stop hard-coding FS input regs
[mesa.git] / src / gallium / drivers / freedreno / a5xx / fd5_program.c
index 286411ec44eede2a1a87a991c36d62b383929c3f..ba3339fb1d2365299df9dd06084c023ebb58ab48 100644 (file)
@@ -350,13 +350,12 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
                color_regid[7] = ir3_find_output_regid(s[FS].v, FRAG_RESULT_DATA7);
        }
 
-       samp_id_regid = ir3_find_sysval_regid(s[FS].v, SYSTEM_VALUE_SAMPLE_ID);
+       samp_id_regid   = ir3_find_sysval_regid(s[FS].v, SYSTEM_VALUE_SAMPLE_ID);
        samp_mask_regid = ir3_find_sysval_regid(s[FS].v, SYSTEM_VALUE_SAMPLE_MASK_IN);
-       /* TODO get these dynamically: */
-       face_regid = s[FS].v->frag_face ? regid(0,0) : regid(63,0);
-       coord_regid = s[FS].v->frag_coord ? regid(0,0) : regid(63,0);
-       zwcoord_regid = s[FS].v->frag_coord ? regid(0,2) : regid(63,0);
-       vcoord_regid = (s[FS].v->total_in > 0) ? s[FS].v->pos_regid : regid(63,0);
+       face_regid      = ir3_find_sysval_regid(s[FS].v, SYSTEM_VALUE_FRONT_FACE);
+       coord_regid     = ir3_find_sysval_regid(s[FS].v, SYSTEM_VALUE_FRAG_COORD);
+       zwcoord_regid   = (coord_regid == regid(63,0)) ? regid(63,0) : (coord_regid + 2);
+       vcoord_regid    = ir3_find_sysval_regid(s[FS].v, SYSTEM_VALUE_VARYING_COORD);
 
        /* we could probably divide this up into things that need to be
         * emitted if frag-prog is dirty vs if vert-prog is dirty..