freedreno/ir3: stop hard-coding FS input regs
[mesa.git] / src / gallium / drivers / freedreno / ir3 / ir3_shader.h
index 272368c69809604f96760dcb75d5deb7647c3d1a..507e89c47350edd8fc0a4e813fbedbd49c14399c 100644 (file)
@@ -143,6 +143,9 @@ struct ir3_shader_key {
         */
        uint16_t fsaturate_s, fsaturate_t, fsaturate_r;
 
+       /* bitmask of ms shifts */
+       uint32_t vsamples, fsamples;
+
        /* bitmask of samplers which need astc srgb workaround: */
        uint16_t vastc_srgb, fastc_srgb;
 };
@@ -164,6 +167,7 @@ ir3_shader_key_changes_fs(struct ir3_shader_key *key, struct ir3_shader_key *las
                if ((last_key->fsaturate_s != key->fsaturate_s) ||
                                (last_key->fsaturate_t != key->fsaturate_t) ||
                                (last_key->fsaturate_r != key->fsaturate_r) ||
+                               (last_key->fsamples != key->fsamples) ||
                                (last_key->fastc_srgb != key->fastc_srgb))
                        return true;
        }
@@ -194,6 +198,7 @@ ir3_shader_key_changes_vs(struct ir3_shader_key *key, struct ir3_shader_key *las
                if ((last_key->vsaturate_s != key->vsaturate_s) ||
                                (last_key->vsaturate_t != key->vsaturate_t) ||
                                (last_key->vsaturate_r != key->vsaturate_r) ||
+                               (last_key->vsamples != key->vsamples) ||
                                (last_key->vastc_srgb != key->vastc_srgb))
                        return true;
        }
@@ -246,10 +251,6 @@ struct ir3_shader_variant {
         *   + From the vert shader, we only need the output regid
         */
 
-       /* for frag shader, pos_regid holds the frag_pos, ie. what is passed
-        * to bary.f instructions
-        */
-       uint8_t pos_regid;
        bool frag_coord, frag_face, color0_mrt;
 
        /* NOTE: for input/outputs, slot is:
@@ -376,7 +377,7 @@ ir3_shader_create_compute(struct ir3_compiler *compiler,
 void ir3_shader_destroy(struct ir3_shader *shader);
 struct ir3_shader_variant * ir3_shader_variant(struct ir3_shader *shader,
                struct ir3_shader_key key, struct pipe_debug_callback *debug);
-void ir3_shader_disasm(struct ir3_shader_variant *so, uint32_t *bin);
+void ir3_shader_disasm(struct ir3_shader_variant *so, uint32_t *bin, FILE *out);
 uint64_t ir3_shader_outputs(const struct ir3_shader *so);
 
 struct fd_ringbuffer;
@@ -522,4 +523,13 @@ ir3_find_sysval_regid(const struct ir3_shader_variant *so, unsigned slot)
        return regid(63, 0);
 }
 
+/* calculate register footprint in terms of half-regs (ie. one full
+ * reg counts as two half-regs).
+ */
+static inline uint32_t
+ir3_shader_halfregs(const struct ir3_shader_variant *v)
+{
+       return (2 * (v->info.max_reg + 1)) + (v->info.max_half_reg + 1);
+}
+
 #endif /* IR3_SHADER_H_ */