diff options
author | Eric Anholt <[email protected]> | 2017-11-21 16:21:36 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2017-12-14 14:36:17 -0800 |
commit | 0bead224fea0ad278ec65d2b2a09033b6c5192ff (patch) | |
tree | d3d944213b16cb11c8c0cc59a1e5c4123b0a3020 /src | |
parent | b08b6289943b225b6451e6c8ce331a8c11bd0c7f (diff) |
nir: Add a new lowering option to lower all txd to txl.
VC5 requires that all txd are lowered in the shader.
Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/nir/nir.h | 6 | ||||
-rw-r--r-- | src/compiler/nir/nir_lower_tex.c | 14 |
2 files changed, 14 insertions, 6 deletions
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 25c36c66ef9..440c3fe9974 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -2619,6 +2619,12 @@ typedef struct nir_lower_tex_options { * with lower_txd_cube_map. */ bool lower_txd_shadow; + + /** + * If true, lower nir_texop_txd on all samplers to a nir_texop_txl. + * Implies lower_txd_cube_map and lower_txd_shadow. + */ + bool lower_txd; } nir_lower_tex_options; bool nir_lower_tex(nir_shader *shader, diff --git a/src/compiler/nir/nir_lower_tex.c b/src/compiler/nir/nir_lower_tex.c index bd603cc2288..1062afd97f0 100644 --- a/src/compiler/nir/nir_lower_tex.c +++ b/src/compiler/nir/nir_lower_tex.c @@ -524,10 +524,9 @@ lower_gradient_cube_map(nir_builder *b, nir_tex_instr *tex) } static void -lower_gradient_shadow(nir_builder *b, nir_tex_instr *tex) +lower_gradient(nir_builder *b, nir_tex_instr *tex) { assert(tex->sampler_dim != GLSL_SAMPLER_DIM_CUBE); - assert(tex->is_shadow); assert(tex->op == nir_texop_txd); assert(tex->dest.is_ssa); @@ -809,16 +808,19 @@ nir_lower_tex_block(nir_block *block, nir_builder *b, if (tex->op == nir_texop_txd && tex->sampler_dim == GLSL_SAMPLER_DIM_CUBE && - (options->lower_txd_cube_map || + (options->lower_txd || + options->lower_txd_cube_map || (tex->is_shadow && options->lower_txd_shadow))) { lower_gradient_cube_map(b, tex); progress = true; continue; } - if (tex->op == nir_texop_txd && options->lower_txd_shadow && - tex->is_shadow && tex->sampler_dim != GLSL_SAMPLER_DIM_CUBE) { - lower_gradient_shadow(b, tex); + if (tex->op == nir_texop_txd && + (options->lower_txd || + (options->lower_txd_shadow && + tex->is_shadow && tex->sampler_dim != GLSL_SAMPLER_DIM_CUBE))) { + lower_gradient(b, tex); progress = true; continue; } |