vc4: Use the NIR cubemap normalization instead of our own.
authorEric Anholt <eric@anholt.net>
Thu, 28 Apr 2016 02:09:01 +0000 (19:09 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 2 May 2016 18:06:29 +0000 (11:06 -0700)
This is one of two uses of the current QIR CSE pass according to
shader-db.  The NIR pass means that we'll end up doing Newton-Raphson on
our RCP, which we weren't doing before, but that's probably actually a
good thing.

src/gallium/drivers/vc4/vc4_program.c

index b1c8b009ffcd322f9b70ab89ff71ae7e1c8bda99..a1646d7369e4877c7c2d02a5749540df4a8f6fde 100644 (file)
@@ -403,12 +403,6 @@ ntq_emit_tex(struct vc4_compile *c, nir_tex_instr *instr)
         }
 
         if (instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE) {
-                struct qreg ma = qir_FMAXABS(c, qir_FMAXABS(c, s, t), r);
-                struct qreg rcp_ma = qir_RCP(c, ma);
-                s = qir_FMUL(c, s, rcp_ma);
-                t = qir_FMUL(c, t, rcp_ma);
-                r = qir_FMUL(c, r, rcp_ma);
-
                 qir_TEX_R(c, r, texture_u[next_texture_u++]);
         } else if (c->key->tex[unit].wrap_s == PIPE_TEX_WRAP_CLAMP_TO_BORDER ||
                    c->key->tex[unit].wrap_s == PIPE_TEX_WRAP_CLAMP ||
@@ -1893,6 +1887,7 @@ vc4_shader_ntq(struct vc4_context *vc4, enum qstage stage,
                 }
         }
 
+        NIR_PASS_V(c->s, nir_normalize_cubemap_coords);
         NIR_PASS_V(c->s, nir_lower_tex, &tex_options);
 
         if (c->fs_key && c->fs_key->light_twoside)