[Mesa-dev] [PATCH] i965: Validate a few SEND-from-GRF requirements.

Kenneth Graunke kenneth at whitecape.org
Fri Jun 24 00:22:41 UTC 2016


We recently had a mistake where we emitted SEND instructions with EOT
set, but from g107 rather than g112-g127.  Adding validation code should
prevent these sorts of problems from slipping back in.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
---
 src/mesa/drivers/dri/i965/brw_eu_validate.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

Thanks for adding the validation code, Matt :)  It's really handy.

Without the base-mrf patches I sent earlier today, this code would
be tripped on various Piglit tests.  With those patches, everything
works again.  (I plan to land this after committing the fixes.)

diff --git a/src/mesa/drivers/dri/i965/brw_eu_validate.c b/src/mesa/drivers/dri/i965/brw_eu_validate.c
index dbf75e4..15fc25b 100644
--- a/src/mesa/drivers/dri/i965/brw_eu_validate.c
+++ b/src/mesa/drivers/dri/i965/brw_eu_validate.c
@@ -68,6 +68,12 @@ src1_is_null(const struct brw_device_info *devinfo, const brw_inst *inst)
           brw_inst_src1_da_reg_nr(devinfo, inst) == BRW_ARF_NULL;
 }
 
+static bool
+src0_is_grf(const struct brw_device_info *devinfo, const brw_inst *inst)
+{
+   return brw_inst_src0_reg_file(devinfo, inst) == BRW_GENERAL_REGISTER_FILE;
+}
+
 static unsigned
 num_sources_from_inst(const struct brw_device_info *devinfo,
                       const brw_inst *inst)
@@ -157,6 +163,18 @@ brw_validate_instructions(const struct brw_codegen *p, int start_offset,
       ERROR_IF(is_unsupported_inst(devinfo, inst),
                "Instruction not supported on this Gen");
 
+      if (brw_inst_opcode(devinfo, inst) == BRW_OPCODE_SEND) {
+         ERROR_IF(brw_inst_src0_address_mode(devinfo, inst) !=
+                  BRW_ADDRESS_DIRECT, "send must use direct addressing");
+
+         if (devinfo->gen >= 7) {
+            ERROR_IF(!src0_is_grf(devinfo, inst), "send from non-GRF");
+            ERROR_IF(brw_inst_eot(devinfo, inst) &&
+                     brw_inst_src0_da_reg_nr(devinfo, inst) < 112,
+                     "send with EOT must use g112-g127");
+         }
+      }
+
       if (error_msg.str && annotation) {
          annotation_insert_error(annotation, src_offset, error_msg.str);
       }
-- 
2.9.0



More information about the mesa-dev mailing list