diff --git a/src/compiler/spirv/nir_spirv.h b/src/compiler/spirv/nir_spirv.h index 765a005e1b8..5c28bc2f093 100644 --- a/src/compiler/spirv/nir_spirv.h +++ b/src/compiler/spirv/nir_spirv.h @@ -110,6 +110,9 @@ struct spirv_to_nir_options { const char *message); void *private_data; } debug; + + /* Force texture sampling to be non-uniform. */ + bool force_tex_non_uniform; }; bool gl_spirv_validation(const uint32_t *words, size_t word_count, diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 41adaa14ae3..5f602274013 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -3104,6 +3104,9 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode, if (operands & SpvImageOperandsNontemporalMask) access |= ACCESS_STREAM_CACHE_POLICY; + if (sampler && b->options->force_tex_non_uniform) + access |= ACCESS_NON_UNIFORM; + if (sampled_val->propagated_non_uniform) access |= ACCESS_NON_UNIFORM;