freedreno/ir3: add helper to determine point-coord inputs
authorRob Clark <robdclark@chromium.org>
Mon, 22 Jun 2020 15:24:55 +0000 (08:24 -0700)
committerMarge Bot <eric+marge@anholt.net>
Wed, 24 Jun 2020 22:29:28 +0000 (22:29 +0000)
This will simplify a bit the logic for setting up vinterp/vprepl in the
driver backend, and also avoid it being a flag-day when we switch the
texcoord pipe cap.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5595>

src/freedreno/ir3/ir3_shader.h
src/gallium/drivers/freedreno/ir3/ir3_gallium.h

index 5ccbd8cb65848ed986c41037ca3e18a56c23a850..3e7ee89debeeba9bd675691450a41ce6c4a923ed 100644 (file)
@@ -769,8 +769,6 @@ struct ir3_shader_linkage {
 static inline void
 ir3_link_add(struct ir3_shader_linkage *l, uint8_t regid_, uint8_t compmask, uint8_t loc)
 {
-
-
        for (int j = 0; j < util_last_bit(compmask); j++) {
                uint8_t comploc = loc + j;
                l->varmask[comploc / 32] |= 1 << (comploc % 32);
index 0f103388b67179418fe7ac4031ecd10472856eb6..e0a8d20e88d1fbb74fc37271cc9b90d482bb1b41 100644 (file)
@@ -49,4 +49,22 @@ void ir3_shader_state_delete(struct pipe_context *pctx, void *hwcso);
 
 void ir3_prog_init(struct pipe_context *pctx);
 
+/**
+ * A helper to determine if a fs input 'i' is point/sprite coord, given
+ * the specified sprite_coord_enable mask
+ */
+static inline bool
+ir3_point_sprite(const struct ir3_shader_variant *fs, int i,
+               uint32_t sprite_coord_enable, bool *coord_mode)
+{
+       gl_varying_slot slot = fs->inputs[i].slot;
+       (void)coord_mode; /* this will be used later */
+       /* since we don't enable PIPE_CAP_TGSI_TEXCOORD: */
+       if (slot >= VARYING_SLOT_VAR0) {
+               unsigned texmask = 1 << (slot - VARYING_SLOT_VAR0);
+               return !!(sprite_coord_enable & texmask);
+       }
+       return false;
+}
+
 #endif /* IR3_GALLIUM_H_ */