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

Reply via email to