vc4: Just use NIR lowering for texture projection.

This means doing Newton-Raphson on the RCP, but it's probably actually a
good thing to be accurate on.
This commit is contained in:
Eric Anholt
2016-04-27 19:17:03 -07:00
parent 2f98bc100d
commit 4b326341f3
+3 -15
View File
@@ -336,8 +336,8 @@ ntq_emit_txf(struct vc4_compile *c, nir_tex_instr *instr)
static void
ntq_emit_tex(struct vc4_compile *c, nir_tex_instr *instr)
{
struct qreg s, t, r, lod, proj, compare;
bool is_txb = false, is_txl = false, has_proj = false;
struct qreg s, t, r, lod, compare;
bool is_txb = false, is_txl = false;
unsigned unit = instr->texture_index;
if (instr->op == nir_texop_txf) {
@@ -367,12 +367,6 @@ ntq_emit_tex(struct vc4_compile *c, nir_tex_instr *instr)
case nir_tex_src_comparitor:
compare = ntq_get_src(c, instr->src[i].src, 0);
break;
case nir_tex_src_projector:
proj = qir_RCP(c, ntq_get_src(c, instr->src[i].src, 0));
s = qir_FMUL(c, s, proj);
t = qir_FMUL(c, t, proj);
has_proj = true;
break;
default:
unreachable("unknown texture source");
}
@@ -440,9 +434,6 @@ ntq_emit_tex(struct vc4_compile *c, nir_tex_instr *instr)
struct qreg u0 = qir_uniform_f(c, 0.0f);
struct qreg u1 = qir_uniform_f(c, 1.0f);
if (c->key->tex[unit].compare_mode) {
if (has_proj)
compare = qir_FMUL(c, compare, proj);
switch (c->key->tex[unit].compare_func) {
case PIPE_FUNC_NEVER:
depth_output = qir_uniform_f(c, 0.0f);
@@ -1846,10 +1837,7 @@ vc4_shader_ntq(struct vc4_context *vc4, enum qstage stage,
*/
.lower_rect = false,
/* We want to use this, but we don't want to newton-raphson
* its rcp.
*/
.lower_txp = false,
.lower_txp = ~0,
/* Apply swizzles to all samplers. */
.swizzle_result = ~0,