diff options
author | Eric Anholt <[email protected]> | 2016-08-02 16:01:34 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2016-08-03 10:55:54 -0700 |
commit | bc1fc9c98539f38f5a29b314d4a993a2e2f7ca0a (patch) | |
tree | 06709a819a2d87b53148f2b777afc71e656126b5 /src/gallium/drivers/vc4/vc4_program.c | |
parent | e97e9e62a1de9689ce8a2a77cb9657b387a1d14b (diff) |
vc4: Avoid generating a custom shader per level in glGenerateMipmaps().
We were baking in the LOD of the source level to each shader. Instead,
pass it in as a uniform -- this requires storing it to a temp register,
but that's better than compiling a ton of separate shaders:
total instructions in shared programs: 115032 -> 115036 (0.00%)
instructions in affected programs: 96 -> 100 (4.17%)
LOST: 572
Diffstat (limited to 'src/gallium/drivers/vc4/vc4_program.c')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_program.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c index 0afd8c6e36e..28b39810756 100644 --- a/src/gallium/drivers/vc4/vc4_program.c +++ b/src/gallium/drivers/vc4/vc4_program.c @@ -393,8 +393,8 @@ ntq_emit_tex(struct vc4_compile *c, nir_tex_instr *instr) } } - if (c->key->tex[unit].forced_first_level) { - lod = qir_uniform_f(c, c->key->tex[unit].forced_first_level); + if (c->key->tex[unit].force_first_level) { + lod = qir_uniform(c, QUNIFORM_TEXTURE_FIRST_LEVEL, unit); is_txl = true; is_txb = false; } @@ -2353,10 +2353,8 @@ vc4_setup_shared_key(struct vc4_context *vc4, struct vc4_key *key, key->tex[i].compare_func = sampler_state->compare_func; key->tex[i].wrap_s = sampler_state->wrap_s; key->tex[i].wrap_t = sampler_state->wrap_t; - if (vc4_sampler->force_first_level) { - key->tex[i].forced_first_level = - sampler->u.tex.first_level; - } + key->tex[i].force_first_level = + vc4_sampler->force_first_level; } } |