diff options
-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; } |