vc4: Enable PIPE_CAP_TGSI_TEXCOORD.
authorEric Anholt <eric@anholt.net>
Tue, 3 Dec 2019 22:46:56 +0000 (14:46 -0800)
committerEric Anholt <eric@anholt.net>
Mon, 29 Jun 2020 16:07:19 +0000 (09:07 -0700)
Dave wants to drop the !TEXCOORD path from NIR, and it's easy enough to
do.  Untested.

Reviewed-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/2952>

src/gallium/drivers/vc4/vc4_nir_lower_io.c
src/gallium/drivers/vc4/vc4_program.c
src/gallium/drivers/vc4/vc4_screen.c

index c82d99812259bf18d69038f88c2d2321350ed4e3..39ecfb6e50c3d5f81728eb6dddd1a8a11e4fde89 100644 (file)
@@ -24,6 +24,7 @@
 #include "vc4_qir.h"
 #include "compiler/nir/nir_builder.h"
 #include "util/format/u_format.h"
+#include "util/u_helpers.h"
 
 /**
  * Walks the NIR generated by TGSI-to-NIR or GLSL-to-NIR to lower its io
@@ -225,17 +226,6 @@ vc4_nir_lower_vertex_attr(struct vc4_compile *c, nir_builder *b,
         replace_intrinsic_with_vec(b, intr, dests);
 }
 
-static bool
-is_point_sprite(struct vc4_compile *c, nir_variable *var)
-{
-        if (var->data.location < VARYING_SLOT_VAR0 ||
-            var->data.location > VARYING_SLOT_VAR31)
-                return false;
-
-        return (c->fs_key->point_sprite_mask &
-                (1 << (var->data.location - VARYING_SLOT_VAR0)));
-}
-
 static void
 vc4_nir_lower_fs_input(struct vc4_compile *c, nir_builder *b,
                        nir_intrinsic_instr *intr)
@@ -261,8 +251,8 @@ vc4_nir_lower_fs_input(struct vc4_compile *c, nir_builder *b,
         int comp = nir_intrinsic_component(intr);
 
         /* Lower away point coordinates, and fix up PNTC. */
-        if (is_point_sprite(c, input_var) ||
-            input_var->data.location == VARYING_SLOT_PNTC) {
+        if (util_varying_is_point_coord(input_var->data.location,
+                                        c->fs_key->point_sprite_mask)) {
                 assert(intr->num_components == 1);
 
                 nir_ssa_def *result = &intr->dest.ssa;
index 4bf7e367213a58fb3a0d1a82876bec3eddc9023a..b06bd89963c1cd52c952b08e3af16d8b859d48f6 100644 (file)
@@ -25,6 +25,7 @@
 #include <inttypes.h>
 #include "util/format/u_format.h"
 #include "util/crc32.h"
+#include "util/u_helpers.h"
 #include "util/u_math.h"
 #include "util/u_memory.h"
 #include "util/ralloc.h"
@@ -1608,11 +1609,8 @@ ntq_setup_inputs(struct vc4_compile *c)
                 if (c->stage == QSTAGE_FRAG) {
                         if (var->data.location == VARYING_SLOT_POS) {
                                 emit_fragcoord_input(c, loc);
-                        } else if (var->data.location == VARYING_SLOT_PNTC ||
-                                   (var->data.location >= VARYING_SLOT_VAR0 &&
-                                    (c->fs_key->point_sprite_mask &
-                                     (1 << (var->data.location -
-                                            VARYING_SLOT_VAR0))))) {
+                        } else if (util_varying_is_point_coord(var->data.location,
+                                                               c->fs_key->point_sprite_mask)) {
                                 c->inputs[loc * 4 + 0] = c->point_x;
                                 c->inputs[loc * 4 + 1] = c->point_y;
                         } else {
index cd3c6f56dd7258215706e30bf684c4948c2fb702..f4fae386fd878d476722810f165fa7b6d069f5b1 100644 (file)
@@ -148,6 +148,7 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
         case PIPE_CAP_TEXTURE_MULTISAMPLE:
         case PIPE_CAP_TEXTURE_SWIZZLE:
         case PIPE_CAP_TEXTURE_BARRIER:
+        case PIPE_CAP_TGSI_TEXCOORD:
                 return 1;
 
         case PIPE_CAP_NATIVE_FENCE_FD: