summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2016-04-22 11:51:55 -0700
committerEric Anholt <eric@anholt.net>2016-05-02 11:06:29 -0700
commit226bd9294541f65c91cad44924ef68b6da18f2a2 (patch)
tree778c19ce1c96a5150f0714ff74a348fd4c7650fe /src/gallium
parent4b326341f3efc2d5e534ddb755d23a35806bf8f6 (diff)
downloadexternal_mesa3d-226bd9294541f65c91cad44924ef68b6da18f2a2.zip
external_mesa3d-226bd9294541f65c91cad44924ef68b6da18f2a2.tar.gz
external_mesa3d-226bd9294541f65c91cad44924ef68b6da18f2a2.tar.bz2
vc4: Use NIR lowering for sRGB decode.
This should get us the same decode code generated, but with a lot less custom code in the driver.
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/vc4/vc4_program.c38
-rw-r--r--src/gallium/drivers/vc4/vc4_qir.h5
2 files changed, 3 insertions, 40 deletions
diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c
index 3c17676..598fb0b 100644
--- a/src/gallium/drivers/vc4/vc4_program.c
+++ b/src/gallium/drivers/vc4/vc4_program.c
@@ -241,22 +241,6 @@ ntq_rsq(struct vc4_compile *c, struct qreg x)
}
static struct qreg
-qir_srgb_decode(struct vc4_compile *c, struct qreg srgb)
-{
- struct qreg low = qir_FMUL(c, srgb, qir_uniform_f(c, 1.0 / 12.92));
- struct qreg high = qir_POW(c,
- qir_FMUL(c,
- qir_FADD(c,
- srgb,
- qir_uniform_f(c, 0.055)),
- qir_uniform_f(c, 1.0 / 1.055)),
- qir_uniform_f(c, 2.4));
-
- qir_SF(c, qir_FSUB(c, srgb, qir_uniform_f(c, 0.04045)));
- return qir_SEL(c, QPU_COND_NS, low, high);
-}
-
-static struct qreg
ntq_umul(struct vc4_compile *c, struct qreg src0, struct qreg src1)
{
struct qreg src0_hi = qir_SHR(c, src0,
@@ -326,11 +310,6 @@ ntq_emit_txf(struct vc4_compile *c, nir_tex_instr *instr)
for (int i = 0; i < 4; i++)
dest[i] = qir_UNPACK_8_F(c, tex, i);
}
-
- for (int i = 0; i < 4; i++) {
- if (c->tex_srgb_decode[unit] & (1 << i))
- dest[i] = qir_srgb_decode(c, dest[i]);
- }
}
static void
@@ -476,11 +455,6 @@ ntq_emit_tex(struct vc4_compile *c, nir_tex_instr *instr)
for (int i = 0; i < 4; i++)
dest[i] = qir_UNPACK_8_F(c, tex, i);
}
-
- for (int i = 0; i < 4; i++) {
- if (c->tex_srgb_decode[unit] & (1 << i))
- dest[i] = qir_srgb_decode(c, dest[i]);
- }
}
/**
@@ -1864,16 +1838,10 @@ vc4_shader_ntq(struct vc4_context *vc4, enum qstage stage,
} else {
tex_options.swizzles[i][j] = arb_swiz;
}
-
- /* If ARB_texture_swizzle is reading from the R, G, or
- * B channels of an sRGB texture, then we need to
- * apply sRGB decode to this channel at sample time.
- */
- if (arb_swiz < 3 && util_format_is_srgb(format)) {
- c->tex_srgb_decode[i] |= (1 << j);
- }
-
}
+
+ if (util_format_is_srgb(format))
+ tex_options.lower_srgb |= (1 << i);
}
NIR_PASS_V(c->s, nir_normalize_cubemap_coords);
diff --git a/src/gallium/drivers/vc4/vc4_qir.h b/src/gallium/drivers/vc4/vc4_qir.h
index 7d2bdc0..7ea6ec8 100644
--- a/src/gallium/drivers/vc4/vc4_qir.h
+++ b/src/gallium/drivers/vc4/vc4_qir.h
@@ -379,11 +379,6 @@ struct vc4_compile {
uint8_t vattr_sizes[8];
- /* Bitfield for whether a given channel of a sampler needs sRGB
- * decode.
- */
- uint8_t tex_srgb_decode[VC4_MAX_TEXTURE_SAMPLERS];
-
/**
* Array of the VARYING_SLOT_* of all FS QFILE_VARY reads.
*