Inspired by a bug this summer, I've written a basic assembly validation pass. The series currently checks only three things:
- that instruction sources are not null (when they shouldn't be); - that the Gen supports the instruction opcode; and - that the various accumulator restrictions are satisfied. To do this, I add a bit of infrastructure to the annotation system, to allow errors to be printed. In debug builds, an assertion checks that the assembly was validated. When using INTEL_DEBUG=<shader stage>, ERROR: ... will be emitted following a bad instruction, with a hopefully helpful message describing what's wrong. For example: mov(8) g116<1>.xUD null ERROR: src0 is null [...] shader_runner: ../../../../../../mesa/src/mesa/drivers/dri/i965/brw_vec4_generator.cpp:1671: void brw::vec4_generator::generate_code(const cfg_t*, const nir_shader*): Assertion `validated' failed. I'd like to extend the validator to cover many more cases, but that's no reason to hold back what I've already written -- checking for null source would have saved three people a week or two after all. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev