mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 12:10:09 +01:00
nir: add NIR_DEBUG=extended_validation
This runs validation even if the pass makes no progress. It also requires all kinds of metadata before the pass to test whether it correctly preserves or invalidates them. It's disabled by default because it can be extremely slow. Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Georg Lehmann <dadschoorse@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33354>
This commit is contained in:
parent
ecd122ddb8
commit
e04c0025ef
4 changed files with 25 additions and 2 deletions
|
|
@ -48,6 +48,8 @@ static const struct debug_named_value nir_debug_control[] = {
|
|||
"Test serialize and deserialize shader at each successful lowering/optimization call" },
|
||||
{ "novalidate", NIR_DEBUG_NOVALIDATE,
|
||||
"Disable shader validation at each successful lowering/optimization call" },
|
||||
{ "extended_validation", NIR_DEBUG_EXTENDED_VALIDATION,
|
||||
"Validate even if a pass does not make progress and test that it properly preserves all types of metadata. This can be very slow" },
|
||||
{ "tgsi", NIR_DEBUG_TGSI,
|
||||
"Dump NIR/TGSI shaders when doing a NIR<->TGSI translation" },
|
||||
{ "print", NIR_DEBUG_PRINT,
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ extern bool nir_debug_print_shader[MESA_SHADER_KERNEL + 1];
|
|||
#define NIR_DEBUG_CLONE (1u << 0)
|
||||
#define NIR_DEBUG_SERIALIZE (1u << 1)
|
||||
#define NIR_DEBUG_NOVALIDATE (1u << 2)
|
||||
#define NIR_DEBUG_EXTENDED_VALIDATION (1u << 3)
|
||||
#define NIR_DEBUG_TGSI (1u << 4)
|
||||
#define NIR_DEBUG_PRINT_VS (1u << 5)
|
||||
#define NIR_DEBUG_PRINT_TCS (1u << 6)
|
||||
|
|
@ -5337,6 +5338,7 @@ void nir_validate_shader(nir_shader *shader, const char *when);
|
|||
void nir_validate_ssa_dominance(nir_shader *shader, const char *when);
|
||||
void nir_metadata_set_validation_flag(nir_shader *shader);
|
||||
void nir_metadata_check_validation_flag(nir_shader *shader);
|
||||
void nir_metadata_require_all(nir_shader *shader);
|
||||
|
||||
static inline bool
|
||||
should_skip_nir(const char *name)
|
||||
|
|
@ -5388,6 +5390,11 @@ nir_metadata_check_validation_flag(nir_shader *shader)
|
|||
{
|
||||
(void)shader;
|
||||
}
|
||||
static inline void
|
||||
nir_metadata_require_all(nir_shader *shader)
|
||||
{
|
||||
(void)shader;
|
||||
}
|
||||
static inline bool
|
||||
should_skip_nir(UNUSED const char *pass_name)
|
||||
{
|
||||
|
|
@ -5406,6 +5413,8 @@ should_print_nir(UNUSED nir_shader *shader)
|
|||
printf("skipping %s\n", #pass); \
|
||||
break; \
|
||||
} \
|
||||
if (NIR_DEBUG(EXTENDED_VALIDATION)) \
|
||||
nir_metadata_require_all(nir); \
|
||||
do_pass if (NIR_DEBUG(CLONE)) \
|
||||
{ \
|
||||
nir_shader *_clone = nir_shader_clone(ralloc_parent(nir), nir);\
|
||||
|
|
@ -5430,6 +5439,8 @@ should_print_nir(UNUSED nir_shader *shader)
|
|||
if (should_print_nir(nir)) \
|
||||
nir_print_shader(nir, stdout); \
|
||||
nir_metadata_check_validation_flag(nir); \
|
||||
} else if (NIR_DEBUG(EXTENDED_VALIDATION)) { \
|
||||
nir_validate_shader(nir, "after " #pass " in " __FILE__ ":" NIR_STRINGIZE(__LINE__)); \
|
||||
} \
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -119,4 +119,14 @@ nir_metadata_check_validation_flag(nir_shader *shader)
|
|||
assert(!(impl->valid_metadata & nir_metadata_not_properly_reset));
|
||||
}
|
||||
}
|
||||
|
||||
void nir_metadata_require_all(nir_shader *shader)
|
||||
{
|
||||
bool force_unroll_sampler_indirect = shader->options->force_indirect_unrolling_sampler;
|
||||
nir_variable_mode indirect_mask = shader->options->force_indirect_unrolling;
|
||||
nir_foreach_function_impl(impl, shader) {
|
||||
nir_metadata_require(impl, nir_metadata_all, indirect_mask,
|
||||
(int)force_unroll_sampler_indirect);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -5316,9 +5316,9 @@ nir_opt_varyings(nir_shader *producer, nir_shader *consumer, bool spirv,
|
|||
producer->info.cull_distance_array_size = 0;
|
||||
}
|
||||
|
||||
if (progress & nir_progress_producer)
|
||||
if ((progress & nir_progress_producer) || NIR_DEBUG(EXTENDED_VALIDATION))
|
||||
nir_validate_shader(producer, "nir_opt_varyings");
|
||||
if (progress & nir_progress_consumer)
|
||||
if ((progress & nir_progress_consumer) || NIR_DEBUG(EXTENDED_VALIDATION))
|
||||
nir_validate_shader(consumer, "nir_opt_varyings");
|
||||
|
||||
return progress;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue